2014-10-02 91 views
2

在MySql中,如何在同時執行多個查詢時獲取所有受影響的行的計數?在MySql中執行多條語句時獲取所有受影響行的數量

我現在這樣做:

$stmt = ' 
    update prodb set buyer = buyer+1 where userId = 1; 
    update prodb set seller = seller+1 where userId = 2; 
'; 

$update = $dbc->prepare($stmt); 

$update->execute(); 

$queryCount = $update->rowCount(); 

echo 'This is QueryCount '.$queryCount; 

但是,即使有受到影響2行,我得到$queryCount1。有沒有辦法讓查詢計數爲2。即第一個陳述的次數和第二個陳述的次數?我可以確認這裏有兩行受到影響。

我正在使用MySql PDO完成所有這些工作。

+0

你不能。 'rowCount()'只能得到你執行的** LAST **查詢的結果。如果您執行兩個查詢,那麼這些查詢中的哪一個將成爲rowCount()報告中的一個。 rowCount()實質上只是調用'mysql_affected_rows()'api函數。 – 2014-10-02 16:15:06

+0

有人說過關於推進光標的事情......你會知道那是什麼嗎? – jmenezes 2014-10-02 16:17:55

+0

你沒有使用遊標。它們只能在存儲過程中使用。 – 2014-10-02 16:20:05

回答

2

https://dev.mysql.com/doc/refman/5.6/en/c-api-multiple-queries.html說:

執行多語句字符串可以產生多個結果集或行計數的指標。處理這些結果涉及的方法與單一語句的情況不同:在處理第一條語句的結果之後,需要檢查是否存在更多結果,如果是,則依次處理它們。爲了支持多結果處理,C API包括mysql_more_results()mysql_next_result()函數。

通過PDO執行此操作的方法是調用PDOStatement::nextRowset()函數。

下面是一個例子。我運行一個多查詢,其中在第一個查詢中插入一行,在第二個查詢中插入兩行。

$sql = "insert into foo() values() ; insert into bar() values(),()"; 

$stmt = $dbh->prepare($sql); 
$stmt->execute(); 

do { 
    echo "row count: ".$stmt->rowCount()."\n"; 
} while ($stmt->nextRowset()); 

輸出:

row count: 1 
row count: 2 
+0

假設我只需要'2'而沒有'do {} while'的東西?這可能嗎? – jmenezes 2014-10-02 16:29:12

+0

當然,只需調用rowCount(),然後調用nextRowset(),然後再次調用rowCount()。 – 2014-10-02 16:30:03