使用 PDO 准备语句时如何在使用限制时获取总行数?

How to get total amount of rows while using limit when using PDO prepared statements?

我找到了一些类似的,但不是我需要的那个:

背景资料: 我正在使用 MySQL 和 PDO class

目前,我正在使用如下两个查询:

获取一页数据:

$sql = "SELECT * FROM `tab`
WHERE `condition` = :condition 
LIMIT $page_size OFFSET $offset";

$array = array('condition'=>$condition);
$mysql = $pdo->prepare($sql);
$mysql->execute($array);

获取总行数:

$sql = "SELECT COUNT(*) FROM `tab`
WHERE `condition` = :condition";

$array = array('condition'=>$condition);
$mysql = $pdo->prepare($sql);
$mysql->execute($array);

可以使用SQL_CALC_FOUND_ROWS命令告诉MySQL到return匹配记录的总数

$sql = "SELECT SQL_CALC_FOUND_ROWS * FROM `tab`
WHERE `condition` = :condition 
LIMIT $page_size OFFSET $offset";

要获取找到的总行数,您可以 运行 此查询

SELECT FOUND_ROWS()

但是,执行 2 个单独的查询通常比使用 SQL_CALC_FOUND_ROWS 更快。这里有一个benchmark to explain

you can read more about this here