簡體   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