使用 PDO 的行计数
周围有许多相互矛盾的说法。在 PHP 中使用 PDO 获取行计数的最佳方法是什么?在使用PDO之前,我只是简单地使用了.mysql_num_rows
fetchAll
是我不想要的东西,因为我有时可能会处理大型数据集,所以不适合我的使用。
您有什么建议吗?
周围有许多相互矛盾的说法。在 PHP 中使用 PDO 获取行计数的最佳方法是什么?在使用PDO之前,我只是简单地使用了.mysql_num_rows
fetchAll
是我不想要的东西,因为我有时可能会处理大型数据集,所以不适合我的使用。
您有什么建议吗?
$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;
正如我之前在回答类似问题时所写的那样,唯一有效的原因是因为它在内部获取所有行以向您提供该信息,即使它在您看来不是这样。mysql_num_rows()
因此,在PDO中,您的选项是:
fetchAll()
函数将所有行提取到数组中,然后在数组上使用。count()
SELECT COUNT(*)
FOUND_ROWS()函数,
除非查询有或子句(在这种情况下,查询返回的行数和返回的行数可能不同)。但是,此功能已弃用,并将在将来删除。SQL_CALC_FOUND_ROWS
LIMIT
FOUND_ROWS()