繁体   English   中英

如何从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服务器的SQL驱动程序

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

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

文档清楚地说明了PDOStatement :: rowCount

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

如果要对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) {

}
...

?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM