使用 PDO 的行计数

2022-08-30 06:18:54

周围有许多相互矛盾的说法。在 PHP 中使用 PDO 获取行计数的最佳方法是什么?在使用PDO之前,我只是简单地使用了.mysql_num_rows

fetchAll是我不想要的东西,因为我有时可能会处理大型数据集,所以不适合我的使用。

您有什么建议吗?


答案 1
$sql = "SELECT count(*) FROM `table` WHERE foo = ?"; 
$result = $con->prepare($sql); 
$result->execute([$bar]); 
$number_of_rows = $result->fetchColumn(); 

这不是最优雅的方法,而且它涉及额外的查询。

PDO有,这显然在MySql中不起作用。真是太痛苦了。PDOStatement::rowCount()

来自 PDO 文档:

对于大多数数据库,PDOStatement::rowCount() 不返回受 SELECT 语句影响的行数。相反,请使用 PDO::query() 发出与预期 SELECT 语句具有相同谓词的 SELECT COUNT(*) 语句,然后使用 PDOStatement::fetchColumn() 检索将返回的行数。然后,您的应用程序可以执行正确的操作。

编辑:上面的代码示例使用预准备语句,在许多情况下,为了计算行数,这可能是不必要的,所以:

$nRows = $pdo->query('select count(*) from blah')->fetchColumn(); 
echo $nRows;

答案 2

正如我之前在回答类似问题时所写的那样,唯一有效的原因是因为它在内部获取所有行以向您提供该信息,即使它在您看来不是这样。mysql_num_rows()

因此,在PDO中,您的选项是:

  1. 使用 PDO 的 fetchAll() 函数将所有行提取到数组中,然后在数组上使用。count()
  2. 按照 karim79 的建议对 执行额外的查询。SELECT COUNT(*)
  3. 使用MySQL的FOUND_ROWS()函数,除非查询有或子句(在这种情况下,查询返回的行数和返回的行数可能不同)。但是,此功能已弃用,并将在将来删除。SQL_CALC_FOUND_ROWSLIMITFOUND_ROWS()

推荐