使用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之前
有没有办法可以区分这两种情况? (除了之前读取行并在更新前手动检查值)
答案 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
}