在MySql中执行多个语句时获取所有受影响的行的计数

时间:2014-10-02 16:06:21

标签: php mysql sql pdo

在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行受到影响,我的$queryCount仅为1。有没有办法让查询计数为2。即第一个陈述的数量,以及第二个陈述的数量?我可以确认这里有两行受影响。

我正在使用MySql PDO完成所有这些。

1 个答案:

答案 0 :(得分: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