[英]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.