使用PHP mysqli获取UPDATE查询匹配的行数

时间:2011-03-13 12:56:05

标签: php mysql mysqli

较旧的mysql扩展名有CLIENT_FOUND_ROWS连接标志,但我找不到 mysqli 的任何等效内容。

我有一个update查询,想知道其where子句匹配的行数,而不是实际更改了多少行(如mysqli -> affected_rows所示)。

到目前为止我唯一想到的方法是使用正则表达式解析mysqli -> info(看起来像Rows matched: 40 Changed: 40 Warnings: 0)。但这看起来很糟糕。

6 个答案:

答案 0 :(得分:5)

我使用了以下代码:

// Parse the digits from the info string that has the following format:
// Rows matched: 0 Changed: 0 Warnings: 0
preg_match_all('!\d+!', $mysqli->info, $m);
return $m[0][0]; 

答案 1 :(得分:4)

它位于 mysqli_real_connect的选项中。

还在PHP 5.3中的PDO :: MySQL中引入。

答案 2 :(得分:3)

在运行UPDATE之前,您可以使用相同的WHERE子句运行SELECT COUNT(*)。这将为您计算将匹配的行数。

答案 3 :(得分:1)

同样SELECT ROW_COUNT()可以给出受更新查询影响的行数。

答案 4 :(得分:0)

我对info命令返回的结果做了一个爆炸函数,然后使用了索引[1]。

$ affected = explode(":",$ connection-> info); $ rowsAffected = $ affected [1];

答案 5 :(得分:0)

official docs中,看起来可以通过构建PDO对象来实现:

new PDO($dsn, $u, $p, array(PDO::MYSQL_ATTR_FOUND_ROWS => true));
相关问题