用于更新的mysqli_affected_rows有时在全行匹配时返回0

问题描述 投票:0回答:1

说,如果我有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");

如何更改它以区分这三个条件:

  1. id=5找到项目并进行设置。
  2. 找不到id=5项目。
  3. 错误

以现在的方式编写,如果我的数据库列val在该行中已经具有1,则mysqli_affected_rows将返回0。

php mysql
1个回答
0
投票

您可以使用mysqli_info来获取区分这两种情况所需的信息。 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中的值来区分两种情况。

© www.soinside.com 2019 - 2024. All rights reserved.