PHP PDO - Num Rows

时间:2010-04-23 17:27:46

标签: php mysql pdo

PDO显然无法计算从选择查询返回的行数(mysqli具有num_rows变量)。

有没有办法做到这一点,没有使用count($results->fetchAll())

4 个答案:

答案 0 :(得分:12)

根据手册,有PDOStatement->rowCount方法;但不应该使用(引用)

  

对于大多数数据库,   PDOStatement::rowCount()没有   返回受影响的行数   一个SELECT声明。
相反,使用   PDO::query()发布SELECT COUNT(*)语句   谓词是您的预期SELECT   声明,然后使用   PDOStatement::fetchColumn()来   检索将要的行数   被退回你的申请可以   执行正确的操作。


如果您已有记录集,并且想知道其中有多少行,则必须使用fetch*方法之一获取数据;并使用计数 - 就像你建议的那样。

答案 1 :(得分:3)

虽然PDO显然有办法计算从mysql的select查询返回的行数,但更重要的是首先对这样的函数有没有用

每次有想法将rowCount()用于SELECT查询时,它都是多余的甚至是有害的。见PDO rowCount()

  • 如果您已经选择了数据,此功能是多余的,因为您只需计算数据
  • 如果您想使用此功能仅获取计数,则会有害,因为您不应该仅选择数据来计算它。选择仅计数,使用SELECT count(*)代替。

答案 2 :(得分:0)

可能更接近num_rows中的mysqli变量和相应的C API函数mysql_num_rows()的另一个选项。是使用返回相同信息的MySQL函数FOUND_ROWS(),而不必再次计算结果中的所有记录。

示例:

$pdoDB->query('SELECT FOUND_ROWS()')->fetchColumn()

答案 3 :(得分:-2)

最简单

  $stmt = $datalink->query('SELECT * FROM projects');
  $rows = $stmt->fetchAll();
  $num_rows = count($rows);
  echo $num_rows ;