2010-04-23 92 views
13

PDO显然无法计算从select查询返回的行数(mysqlinum_rows变量)。PHP PDO - Num Rows

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

+1

可能的重复http://stackoverflow.com/questions/460010/work-around-for-php5s-pdo-rowcount-mysql-issue - 这个问题和你的一样。接受的答案就是你想要的。 – zombat 2010-04-23 17:34:31

+5

我看到了这个问题,但答案很糟糕。对数据库运行第二个查询以查看现在存储在记录集中的行数是非常愚蠢的。 – Ian 2010-04-23 18:57:15

回答

12

根据手册,有一个PDOStatement->rowCount方法;但它不应该被用来(引用)

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


如果你已经有一个记录,想知道有多少行是它,你就必须获取数据,使用的fetch*方法之一;并使用计数 - 就像你所建议的那样。

+7

是的,因此我的问题。 PDO *如何不具有num_rows功能?每个其他数据库连接器lib都有它。 – Ian 2010-04-23 17:34:01

+0

如果你有数据,你可以自己计算它包含的行数*(如你所建议的)*;所以我想没有*真正的*需要一种方法可以做到这一点...... – 2010-04-23 17:35:39

+5

抓取所有的数据只是为了计算,然后抛出阵列是非常浪费,尤其是如果它是一个大阵列。 – Ian 2010-04-23 18:56:19

0

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

例子:

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

这个答案现在没有意义,因为你可以有规律的计数 – 2014-04-04 08:10:32

2

虽然PDO显然有各种手段来算从MySQL的选择查询返回的行数,更重要的是,有没有对这样的功能使用第一个地方。

每当您有一个想法将rowCount()用于SELECT查询时,它可能是多余的,甚至是有害的。见PDO rowCount():万一

  • 您已经选择的数据,这一功能是多余的,因为你根本就统计数据
  • 您要使用此功能只得到计数的情况下,这将是有害的,因为你不应该选择数据来计算它。只选择计数,使用SELECT count(*)来代替。
+2

你甚至读过这个问题的接受答案吗?根据PDO的文档:“如果由关联的PDOStatement执行的最后一条SQL语句是SELECT语句,某些数据库可能会返回该语句返回的行数。但是,对于所有数据库,并不能保证这种行为,因此不应该依赖便携式应用程序“。 – Ian 2014-04-05 14:05:36

+3

那么,如果您要求使用便携式应用程序,那么不要用mysql标记您的问题。 – 2014-04-05 14:11:22

+0

我该如何去计算呢?我以后在HTML文档中使用PHP MySQL查询来显示数据库中的数据,但是我想要显示计数的元素来自提取和显示数据之前? – Anthony 2017-10-22 22:21:10