PHP PDO - mysqli_num_rows的替代方案

时间:2014-10-01 09:16:55

标签: php pdo mysqli

使用mysqli,我可以使用mysqli_num_rows从select查询中获取行数。我无法找到使用PDO执行此操作的方法,而无需执行SELECT COUNT(*)之类的单独查询?当我已有记录集时,我没有看到单独查询的重点。

4 个答案:

答案 0 :(得分:5)

您可以使用SQL_CALC_FOUND_ROWS作为记录here。例如:

$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子句时获取完全匹配计数,但是,如果没有一个子句它可以正常工作,并且它比使用{{1}再次发出相同查询更有效因为它只检索第一个查询值存储的计数值,而不必运行另一个完整的查询。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

试试这个:

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

$result->execute();
$row_count =$result->fetchColumn();
echo $row_count;

答案 3 :(得分:0)

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

  

对于大多数数据库,PDOStatement::rowCount() 不会返回   受SELECT语句影响的行数。而是使用   PDO :: query()发出带有相同的SELECT COUNT(*)语句   将谓词作为预期的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。出于性能原因,并非everys数据库系统具有内部,技术能力来计算查询中选择的总行数。知道总行数需要在提供行之前检查所有行。