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