$sql = "UPDATE a SET aname='名字' WHERE aid=88";
$r = $conn->query($sql);
if ($r) {
echo "以為更新成功了";
}
$conn->query() 返回 true 只代表語句執行無語法錯誤,即使 WHERE 條件無匹配行(如 aid=88 不存在),也返回 true。
$sql = "UPDATE a SET aname='名字' WHERE aid=88";
$r = $conn->query($sql);
if ($r) {
$affected = $conn->affected_rows; // mysqli
// 或 $affected = mysqli_affected_rows($conn);
// PDO: $stmt->rowCount()
if ($affected > 0) {
echo "真正更新了 $affected 行";
} else {
echo "語句執行成功,但無數據變更(條件不匹配或值相同)";
}
}
affected_rows > 0:有行被實際修改(舊值 ≠ 新值)。affected_rows = 0:無行匹配,或新值等於舊值(MySQL 優化:不更新相同值)。matched_rows(需 mysqli_info 或 ROW_COUNT()):匹配 WHERE 條件的行數,即使值未變也計入。$mysqli = new mysqli("localhost", "user", "pass", "db");
if ($mysqli->connect_errno) die("Connect failed: " . $mysqli->connect_error);
$sql = "UPDATE users SET name='NewName' WHERE id=999";
if (!$mysqli->query($sql)) {
die("SQL Error: " . $mysqli->error);
}
if ($mysqli->affected_rows > 0) {
echo "成功更新 {$mysqli->affected_rows} 行";
} else {
echo "無數據更新(ID 不存在或名稱相同)";
}
$mysqli->close();