较旧的mysql扩展名有CLIENT_FOUND_ROWS
连接标志,但我找不到 mysqli 的任何等效内容。
我有一个update
查询,想知道其where
子句匹配的行数,而不是实际更改了多少行(如mysqli -> affected_rows
所示)。
到目前为止我唯一想到的方法是使用正则表达式解析mysqli -> info
(看起来像Rows matched: 40 Changed: 40 Warnings: 0
)。但这看起来很糟糕。
答案 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));