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