持久连接:MySQL FOUND_ROWS()结果


Persistent connection: MySQL FOUND_ROWS() results

作为一个背景词,在MySQL中,使用SQL_CALC_FOUND_ROWS标志和FOUND_ROWS()函数,MySQL可以检索如果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.

如果两个用户几乎同时点击,是否有任何方法可以使请求交叉,其中一个可以获得另一个请求的数据?

不,这不是问题。

就PHP页面而言,在页面的持续时间内,它有自己独特的连接。持久性连接与非持久性连接的唯一区别在于,在页面退出后,连接不会被拆除,而是被放回池中,以便移交给其他页面。换句话说,它不是共享连接,而是重用的连接。如果有35个页面同时提供一个页面请求,那么仍然有35个同时连接到您的数据库。

不过,您必须小心传播连接状态(例如不完整的事务),但这是一个单独的问题。