當前位置: 首頁> 最新文章列表> 如何使用PDOStatement::rowCount 獲取UPDATE 查詢的實際影響行數

如何使用PDOStatement::rowCount 獲取UPDATE 查詢的實際影響行數

gitbox 2025-05-28

在使用PHP 的PDO 操作數據庫時, PDOStatement::rowCount()是一個常見卻常被誤解的方法。尤其是在執行UPDATEDELETE語句後,我們常用它來判斷是否真的“更新”或“刪除”了數據。但你知道它背後的行為細節嗎?

基本用法

$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'password');
$sql = "UPDATE users SET status = 'active' WHERE last_login > :date";
$stmt = $pdo->prepare($sql);
$stmt->execute([':date' => '2024-01-01']);

echo "更新了 " . $stmt->rowCount() . " 行記錄";

這段代碼執行一條UPDATE語句,使用rowCount()獲取實際影響的行數。

注意事項

  1. 只對DML 有效rowCount()INSERTUPDATEDELETE後能正確返回受影響行數。但對SELECT ,MySQL 驅動通常返回0。

  2. 與數據變更有關:如果目標行數據沒有真正變化(即新值和舊值一樣), rowCount()可能返回0。這是MySQL 的行為,而不是PDO 的問題。

  3. 不等於“匹配行數” :它統計的是“實際發生變化的行數”,而非“符合WHERE 條件的行數”。

示例:檢測用戶信息是否被更新

$sql = "UPDATE users SET email = :email WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute([':email' => '[email protected]', ':id' => 1]);

if ($stmt->rowCount() > 0) {
    echo "用戶信息已更新";
} else {
    echo "沒有更新,可能是數據未變化或 ID 不存在";
}

掌握rowCount()的行為,可以讓你的業務邏輯更嚴謹,避免誤判數據庫操作是否生效。更多實例可查看https://gitbox.net/docs/pdo-update