首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP MySQL 判斷 UPDATE 是否真正修改資料:affected_rows 正確用法

     編輯:PHP 綜合知識

錯誤認知

$sql = "UPDATE a SET aname='名字' WHERE aid=88";
$r = $conn->query($sql);
if ($r) { echo "以為更新成功"; } // 錯誤!只要 SQL 語法正確就回傳 true,即使 WHERE 無匹配行。

正確方法:affected_rows

// mysqli 物件風格
$affected = $conn->affected_rows;

// mysqli 程序風格
$affected = mysqli_affected_rows($conn);

// PDO
$stmt = $pdo->execute();
$affected = $stmt->rowCount();

回傳值含義

值含義
> 0實際修改的行數
= 0WHERE 條件匹配但資料相同(無實際變更),或無匹配行
= -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)。
  • 事務中需在 `commit()` 前檢查,回滾後計數歸零。
  • 搭配 `ROW_COUNT()` SQL 函數可在存儲程序中使用。

永遠不要用查詢回傳布林值判斷 UPDATE 成效,請用 affected_rows / rowCount()。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved