繁体   English   中英

解决PHP5的PDO rowCount MySQL问题

[英]Work-around for PHP5's PDO rowCount MySQL issue

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

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

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

另请参见: FOUND_ROWS上的MySQL文档()

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM