$sql = "UPDATE a SET aname='名字' WHERE aid=88";
$r = $conn->query($sql);
if ($r) { echo "以為更新成功"; } // 錯誤!只要 SQL 語法正確就回傳 true,即使 WHERE 無匹配行。
// mysqli 物件風格
$affected = $conn->affected_rows;
// mysqli 程序風格
$affected = mysqli_affected_rows($conn);
// PDO
$stmt = $pdo->execute();
$affected = $stmt->rowCount();
| 值 | 含義 |
|---|---|
| > 0 | 實際修改的行數 |
| = 0 | WHERE 條件匹配但資料相同(無實際變更),或無匹配行 |
| = -1 | 查詢錯誤或不支援(如 SELECT) |
$sql = "UPDATE users SET email=? WHERE id=?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("si", $email, $id);
$stmt->execute();
if ($stmt->affected_rows > 0) {
echo "更新成功,影響 {$stmt->affected_rows} 筆";
} elseif ($stmt->affected_rows === 0) {
echo "資料無變更或 ID 不存在";
} else {
echo "執行錯誤: " . $stmt->error;
}
REPLACE INTO、`INSERT ... ON DUPLICATE KEY UPDATE` 也會反映在 `affected_rows`(新增=1,更新=2)。永遠不要用查詢回傳布林值判斷 UPDATE 成效,請用 affected_rows / rowCount()。