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

时间:2019-03-14 12:42:53

标签: php sql-server pdo sqlsrv

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

  

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

在此问题上需要一些帮助

1 个答案:

答案 0 :(得分:0)

有关PDOStatement::rowCount的文档很清楚。

  

返回添加,删除或更改的行数。如果最后一个SQL   关联的PDOStatement执行的语句是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) {

}
...

?>