6

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 时

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

4

2 回答 2

4

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

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

于 2014-08-25T08:57:38.813 回答
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
}   
于 2014-08-25T09:23:21.363 回答