且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Php PDO rowCount() 返回错误结果

更新时间:2023-02-22 17:21:03

你不应该依赖 PDOStatement::rowCount() 来获取受 SELECT 语句影响的行数,参见 PHP 手册,PDOStatement::rowCount:

You shouldn't rely on PDOStatement::rowCount() to get the number of rows affected by a SELECT statement, see PHP manual, PDOStatement::rowCount:

DOStatement::rowCount() 返回受影响的行数相应的执行的最后一个 DELETE、INSERT 或 UPDATE 语句PDOStatement 对象.

DOStatement::rowCount() returns the number of rows affected by the last DELETE, INSERT, or UPDATE statement executed by the corresponding PDOStatement object.

如果关联的 PDOStatement 执行的最后一条 SQL 语句是一条 SELECT 语句,某些数据库可能会返回行数该语句返回.但是,不能保证此行为适用于所有数据库,不应依赖于可移植应用程序.

If the last SQL statement executed by the associated PDOStatement was a SELECT statement, some databases may return the number of rows returned by that statement. However, this behaviour is not guaranteed for all databases and should not be relied on for portable applications.

[...]

示例 #2 对 SELECT 语句返回的行进行计数

Example #2 Counting rows returned by a SELECT statement

对于大多数数据库,PDOStatement::rowCount() 不返回受 SELECT 语句影响的行数.相反,使用PDO::query() 发出一个 SELECT COUNT(*) 语句谓词作为您想要的 SELECT 语句,然后使用PDOStatement::fetchColumn() 来检索将要执行的行数被退回.然后,您的应用程序可以执行正确的操作.

For most databases, PDOStatement::rowCount() does not return the number of rows affected by a SELECT statement. Instead, use PDO::query() to issue a SELECT COUNT(*) statement with the same predicates as your intended SELECT statement, then use PDOStatement::fetchColumn() to retrieve the number of rows that will be returned. Your application can then perform the correct action.