php - 用于 UPDATE 的 mysqli_affected_rows 有时在全行匹配时返回 0
问题描述
说,如果我有 MySQL 查询来更新一行:
$res = mysqli_query($link,
"UPDATE table SET val=1 WHERE id=5");
if($res)
{
if(mysqli_affected_rows($link) > 0)
{
echo("Updated something!");
}
else
echo("Didn't update");
}
else
echo("Error");
如何更改它以区分这三个条件:
- 找到项目
id=5
并设置它。 - 没有找到带有 的项目
id=5
。 - 错误
按照现在的编写方式,如果我的数据库列val
已经1
在该行中,mysqli_affected_rows
将返回 0。
解决方案
您可以使用mysqli_info
来获取区分这两种情况所需的信息。mysqli_info($link)
查询后将UPDATE
返回一个类似的字符串
Rows matched: 1 Changed: 1 Warnings: 0
然后您可以解析它,例如使用preg_match
:
// $info = mysqli_info($link);
$info = 'Rows matched: 12 Changed: 8 Warnings: 0';
preg_match('/Rows matched: (\d+) Changed: (\d+)/', $info, $matches);
list(, $matched, $changed) = $matches;
echo "$matched rows matched, $changed rows changed\n";
输出:
12 rows matched, 8 rows changed
然后,您可以使用$matched
和中的值$changed
来区分您的两种情况。
推荐阅读
- javascript - 如何正确附加表格行并在 laravel 和 javascript 中大量保存到数据库中?
- c# - 运行功能时面临问题,Visual Studio 中的规范流,构建错误
- c++ - 循环问题的货物运输系统
- android - 我无法使用rabbitmq进行后台服务
- apache-flink - 为什么 JobListeners 可以在本地环境 (IDE) 中工作,但不能在我的生产环境中工作?
- python - from os import path import sys sys.path.append(path.abspath('../ProgA'))
- mysql - Mysql获取唯一行
- java - 当我添加 2 首歌曲并单击它时,音乐应用程序崩溃
- oracle - .Net Core 的 OracleCoherence 库是什么?
- python - Python Datetime 与格式字符串不匹配