如何从 php pdo 中的 mssql 查询中获取受影响的行数

How to get number of affected rows from a mssql query in php pdo

我正在将我的 php 项目从使用 mysql 更改为 mssql。 当我使用 if ($query->rowCount() == 0) { 和 mysql 效果很好,但是对于 mssql 我得到一个不正确的负值。 所以我尝试将 $count = count($query->fetchAll()); 与 mssql 一起使用,这给了我一个类似于使用 mysql 时的正值,但我得到了一个错误 我正在使用 Php drivers for sql server

Fatal error: Uncaught PDOException: SQLSTATE[IMSSP]: There are no more rows in the active result set. Since this result set is not scrollable, no more data may be retrieved.

在这个问题上需要一些帮助

文档清楚 PDOStatement::rowCount

Returns the number of rows added, deleted, or changed. If the last SQL statement executed by the associated PDOStatement was a SELECT statement, a PDO::CURSOR_FWDONLY cursor returns -1. A PDO::CURSOR_SCROLL ABLE cursor returns the number of rows in the result set.

如果要对SELECT语句使用rowCount(),则需要使用PDO::CURSOR_SCROLLABLE:

<?php  
#
$server = "server\instance,port";  
$dbname = "database";
$uid = "uid";  
$pwd = "pwd";  

# Connection
$conn = new PDO("sqlsrv:server=$server ; Database = $dbname", $uid, $pwd);  

# SELECT statement
$query = "SELECT * FROM Table1";  
$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));  
$stmt->execute();  
echo $stmt->rowCount();  

# End
$stmt = null;
$conn = null;
?>   

当您使用 $count = count($query->fetchAll()); 时,您的结果集已在 $query->fetchAll() 调用后获取。如果您尝试调用 PDOStatement::fetchPDOStatement::fetchAll 方法,您将收到此错误。

尝试下一个方法:

<?php

...
$result = $query->fetchAll(); 
$count = count($result);
foreach ($result as $row) {

}
...

?>