持久连接:MySQL FOUND_ROWS()结果

4

作为背景说明,在MySQL中,使用SQL_CALC_FOUND_ROWS标志和FOUND_ROWS()函数可以让您检索到如果SELECT未使用LIMIT将返回的行数总数,而无需发出第二个繁重的查询:

$query =  "SELECT SQL_CALC_FOUND_ROWS * from movies
            WHERE....
            LIMIT 20";
$res1 = $db->query($query);
$numrows = $db->query('SELECT FOUND_ROWS()')->fetchColumn();

这对于分页非常有用。假设你正在使用持久连接:

try{
  $db = new PDO('mysql:host=localhost;dbname=' . $dbname, $user, $pass,
        array( PDO::ATTR_PERSISTENT => true )
               );
etc.

如果两个用户几乎同时点击,是否有可能请求会相互交叉,导致一个用户得到另一个用户所请求的数据?
1个回答

3
不,这不是问题。
就您的PHP页面而言,它在页面的整个生命周期内有自己独特的连接。持久连接与非持久连接的唯一区别在于,页面退出后,连接不会被断开,而是放回池中以供其他页面使用。换句话说,这不是一个“共享”连接,而是一个“重复使用”的连接。如果有35个页面同时服务于页面请求,则仍然会有35个并发连接到您的数据库。
但是,您必须小心传播连接状态(例如未完成的事务),但那是另一个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接