2014-10-02 94 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