当值未更改时,MySQL在UPDATE上没有受影响的行

时间:2014-08-25 08:48:47

标签: php mysql sql-update rows-affected

使用PHP的MySQL,尝试更新一行:

$dbQuery = 'UPDATE UserTable SET Age=25 WHERE Id=3';
$result = mysqli_query($dbLink, $dbQuery);
if ($result === FALSE) {
  // Take care of error
}
else {
  $numAffectedRows = mysqli_affected_rows($dbLink);
}

我在两个不同的案件中得到零$ numAffectedRows:
 1.当没有用户行时Id = 3
 2.当用户行的Id = 3但年龄已经是25之前

有没有办法可以区分这两种情况? (除了之前读取行并在更新前手动检查值)

2 个答案:

答案 0 :(得分:3)

根据mysql documentation,您可以通过在使用mysql_real_connect进行连接时传递MYSQLI_CLIENT_FOUND_ROWS标志来更改affected_rows的行为。

在这种情况下,mysql_affected_rows返回WHERE条件匹配的行数,而不是更新的行数。

答案 1 :(得分:0)

我认为只使用一个查询就可以实现这一点。 我会选择INSERT INTO..ON DUPLICATE方法。

$dbQuery = "INSERT INTO UserTable (Id,Age) VALUES('3','25') ON DUPLICATE KEY 
            UPDATE Id='3',Age='25'";
$result = mysql_query($dbQuery);
if ($result === FALSE) {
   // Take care of error
}
else {
   $numAffectedRows = mysql_affected_rows();
   // $numAffectedRows = 0  => row exist
   // $numAffectedRows = >0 => row added with Id,Age specified
}