解决PHP5的PDO rowCount MySQL问题

时间:2009-01-20 03:16:00

标签: php pdo

我最近开始使用PHP5开发一个新项目,并希望使用他们的PDO类。问题是MySQL PDO驱动程序不支持rowCount(),所以没有办法运行查询然后获取受影响的行数或返回的行数,这是一个相当大的问题,就我而言。我想知道是否还有其他人已经处理过此问题,以及你为解决这个问题所做的工作。必须执行fetch()或fetchAll()来检查是否有任何行受到影响或返回似乎是对我的攻击,我宁愿只做$ stmt-> numRows()或类似的东西。

3 个答案:

答案 0 :(得分:26)

您可以在原始SELECT FOUND_ROWS()查询后立即发出SELECT查询以获取行数。

$pdo->query("SELECT * FROM users");
$foundRows = $pdo->query("SELECT FOUND_ROWS()")->fetchColumn();

另请参阅:MySQL Docs on FOUND_ROWS()

答案 1 :(得分:1)

对于那些使用MySQL存储过程的人来说,这个解决方案并不可行。我建议你做的是让你的存储过程创建两个行集。第一个包含一行和一列,包含记录数。第二个是用于获取该行数的记录集。

无限行数可以是SELECT COUNT(*),与没有WHERE / LIMIT子句的第二行集具有完全相同的OFFSET子句。

另一个想法可能是创建一个临时表。使用SELECT语句填充临时表。然后,您可以使用SELECT COUNT(*) FROM tmpTable作为第一个行集,SELECT * FROM tmpTable作为第二个行集。

答案 2 :(得分:0)

这个问题是基于几个错误的假设和一个过时的陈述。

首先,不要混淆受影响的选定的行的数量。 PDO甚至在09年支持前者。

说到SELECT语句返回的行数 - 您只需要那个数字。你拥有的数据就足够了。

是的,现在rowCount()也支持从mysql中选择的行数。但同样 - 无论如何,你在普通的网络应用程序中都不需要这个数字。