15

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

4

3 回答 3

26

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

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

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

于 2009-03-18T20:47:30.130 回答
1

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

无限行数可以是与没有/子句的第二行集SELECT COUNT(*)完全相同的子句。 WHERELIMITOFFSET

另一个想法可能是创建一个临时表。使用您的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 回答