PHP PDO - mysqli_num_rows的替代品


PHP PDO - alternative for mysqli_num_rows

使用

mysqli,我可以使用 mysqli_num_rows 从选择查询中获取行数。我找不到一种方法来使用 PDO 做到这一点,而不必像 SELECT COUNT(*) ?当我已经有一个记录集时,我不认为进行单独查询有什么意义。

您可以使用

此处所述的SQL_CALC_FOUND_ROWS。例如:

$result = $db->prepare("SELECT SQL_CALC_FOUND_ROWS id, name FROM fruit WHERE calories > 100"); 
$result->execute();
$result = $db->prepare("SELECT FOUND_ROWS()"); 
$result->execute();
$row_count =$result->fetchColumn();
echo $row_count;

此选项通常用于在具有 LIMIT 子句时获取完全匹配计数,但是,如果没有一个子句,它就可以正常工作,并且比使用 COUNT(*) 再次发出相同的查询要高效得多,因为它只是检索第一个查询值存储的计数值,而不必运行另一个完整查询。

在 Pdo 中,您使用 rowCount .示例:$string-> rowCount ();

RTM: http://php.net/manual/en/pdostatement.rowcount.php

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

$sql = "SELECT COUNT(*) FROM fruit WHERE calories > 100";
if ($res = $conn->query($sql)) {
  /* Check the number of rows that match the SELECT statement */
  if ($res->fetchColumn() > 0) {
        /*    .... */

我不想复制整个 PHP.net 页面,请阅读它。

为什么PDO没有num_rows

您可能认为有 2 个查询会更慢,但事实并非如此。PDO是多个数据库系统的通用客户端库,而不仅仅是MySQL。出于性能原因,并非每个数据库系统都具有内部技术能力来计算选择查询中的总行数。了解行总数需要在提供行之前检查所有行。

试试这个:

$sql = "SELECT count(id) FROM `table` WHERE condition"; 
$result = $db->prepare($sql); 
$result->execute();
$row_count =$result->fetchColumn();
echo $row_count;