PHP PDO rowCount()如何得到它的结果?

时间:2015-02-03 15:57:24

标签: php mysql pdo

select count(*)声明之后使用时,PHP的PDO是否会为rowCount() select运行一个静默的$query = $conn->prepare('select name, alias from accounts where status = 0'); $query->execute(); $queryCount = $query->rowCount(); $profiles = $query->fetchAll(PDO::FETCH_ASSOC); if($queryCount > 0) { print_r($profiles); } else { echo 'No records found'; } 语句,或者它是否会得到它结果使用其他方法?

count

在上面的代码中,一切运行正常,我可以得到正确的行数作为结果。但那里有一个{{1}}语句吗? PHP如何做到这一点?

4 个答案:

答案 0 :(得分:2)

这实际上取决于PDO数据库驱动程序。尽管手册说的是,它通常适用于MySQL连接。最近版本为mysqlnd。可以使用PDO::MYSQL_ATTR_FOUND_ROWS初始化旧版本和旧的libmysqlclient接口,以返回SELECT语句的行计数。

当您要求SELECT COUNT()时,没有自动->rowCount()重新查询。驱动程序在内部接收并保留uint64_t row_count;。服务器响应几乎总是include a result row count for prepared statements

对于->fetchAll和迭代,PDO mysqlnd驱动程序甚至只需手动set->row_count++计算它。 请查看https://github.com/php/php-src/blob/master/ext/mysqlnd/mysqlnd_result.c了解实际发生的情况。

较旧的mysql驱动程序调用{​​{3}},仅在获取所有行后才返回正确的结果计数

答案 1 :(得分:0)

来自here

  

示例#2计算SELECT语句返回的行

     

对于大多数数据库,PDOStatement :: rowCount()不返回   受SELECT语句影响的行数。

意味着:您可能不依赖于您目前实施的内容!

答案 2 :(得分:0)

没有。来自the docs

  

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

在弃用的PHP函数mysql_num_rows()中,使用了MySQL函数mysql_num_rows()。我想PDO也是如此。

可以找到更多信息here

NB :这意味着您当前的代码可能在某些情况下有效,但您无法依赖它。改为使用COUNT(*)查询。

答案 3 :(得分:-2)

来自PHP的文档:

  

PDOStatement :: rowCount()返回受相应PDOStatement对象执行的最后一个DELETE,INSERT或UPDATE语句影响的行数。