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

问题描述 投票:0回答:1

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

致命错误:未捕获PDOException:SQLSTATE [IMSSP]:活动结果集中没有其他行。由于此结果集不可滚动,因此无法检索更多数据。

需要一些帮助来解决这个问题

php sql-server pdo sqlsrv
1个回答
0
投票

关于PDOStatement::rowCount的文件很清楚。

返回添加,删除或更改的行数。如果关联的PDOStatement执行的最后一个SQL语句是SELECT语句,则PDO :: CURSOR_FWDONLY游标返回-1。 PDO :: CURSOR_SCROLL ABLE游标返回结果集中的行数。

如果你想将rowCount()用于SELECT语句,你需要使用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) {

}
...

?>
© www.soinside.com 2019 - 2024. All rights reserved.