MySQL使用PHP,试图更新一行:
$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的用户行,但是Age之前已经是25了
是否有一种方法可以让区分这两种情况?(除了在更新前读取行和手动检查值)
根据mysql文档,在使用mysql_real_connect连接时,可以通过传递MYSQLI_CLIENT_FOUND_ROWS标志来改变affected_rows的行为。
在本例中,mysql_affected_rows返回WHERE条件匹配的行数,而不是更新的行数。
我不认为这是可能的只有一个查询。我会选择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
}