我最近开始使用PHP5开发一个新项目,并希望使用他们的PDO类。问题是MySQL PDO驱动程序不支持rowCount(),所以没有办法运行查询然后获取受影响的行数或返回的行数,这是一个相当大的问题,就我而言。我想知道是否还有其他人已经处理过此问题,以及你为解决这个问题所做的工作。必须执行fetch()或fetchAll()来检查是否有任何行受到影响或返回似乎是对我的攻击,我宁愿只做$ stmt-> numRows()或类似的东西。
答案 0 :(得分:26)
您可以在原始SELECT FOUND_ROWS()
查询后立即发出SELECT
查询以获取行数。
$pdo->query("SELECT * FROM users");
$foundRows = $pdo->query("SELECT FOUND_ROWS()")->fetchColumn();
答案 1 :(得分:1)
对于那些使用MySQL存储过程的人来说,这个解决方案并不可行。我建议你做的是让你的存储过程创建两个行集。第一个包含一行和一列,包含记录数。第二个是用于获取该行数的记录集。
无限行数可以是SELECT COUNT(*)
,与没有WHERE
/ LIMIT
子句的第二行集具有完全相同的OFFSET
子句。
另一个想法可能是创建一个临时表。使用SELECT
语句填充临时表。然后,您可以使用SELECT COUNT(*) FROM tmpTable
作为第一个行集,SELECT * FROM tmpTable
作为第二个行集。
答案 2 :(得分:0)
这个问题是基于几个错误的假设和一个过时的陈述。
首先,不要混淆受影响的和选定的行的数量。 PDO甚至在09年支持前者。
说到SELECT语句返回的行数 - 您只需要那个数字。你拥有的数据就足够了。
是的,现在rowCount()
也支持从mysql中选择的行数。但同样 - 无论如何,你在普通的网络应用程序中都不需要这个数字。