當前位置: 首頁> 最新文章列表> 如何用PDOStatement::rowCount 判斷數據庫操作是否成功

如何用PDOStatement::rowCount 判斷數據庫操作是否成功

gitbox 2025-05-19

在使用PHP 的PDO(PHP Data Objects)操作數據庫時,開發者經常需要判斷一條SQL 語句是否執行成功,特別是在進行INSERTUPDATEDELETE操作時。 PDOStatement::rowCount方法提供了一種方便的方式來檢查受影響的行數,從而判斷數據庫操作是否有效。

什麼是PDOStatement::rowCount?

rowCount()是PDOStatement 類中的一個方法,用於返回受上一個SQL 語句影響的行數。適用於DELETEINSERTUPDATE類型的語句,對於SELECT語句是否可用則依賴於驅動(如MySQL 的SELECT默認不支持準確的行數返回)。

基本語法

$affectedRows = $statement->rowCount();

其中$statement是通過$pdo->prepare()$statement->execute()執行後的返回對象。

示例:使用rowCount 判斷操作是否成功

下面我們來看一個實際的例子,演示如何使用rowCount()來判斷一次UPDATE操作是否成功更新了任何數據。

 <?php
try {
    $pdo = new PDO("mysql:host=localhost;dbname=example_db", "username", "password");
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = "UPDATE users SET email = :email WHERE id = :id";
    $stmt = $pdo->prepare($sql);

    $stmt->bindParam(':email', $newEmail);
    $stmt->bindParam(':id', $userId);

    $newEmail = "[email protected]";
    $userId = 3;

    $stmt->execute();

    if ($stmt->rowCount() > 0) {
        echo "用戶信息更新成功,共更新 " . $stmt->rowCount() . " 條記錄。";
    } else {
        echo "沒有記錄被更新,可能是因為數據沒有變化或用戶ID不存在。";
    }

} catch (PDOException $e) {
    echo "數據庫操作失敗: " . $e->getMessage();
}
?>

注意事項

  1. 對SELECT 的支持有限:雖然某些數據庫驅動支持SELECT查詢後使用rowCount() ,但這不是跨數據庫兼容的行為。如果你需要準確的SELECT 行數,請考慮使用fetchAll()並對結果數組計數。

  2. 行數為0 不等於失敗:當更新的數據與原數據相同時,SQL 執行成功但不會影響任何行, rowCount()返回0。這種情況不應視為失敗,而是“無變化”。

  3. 事務中的使用:在事務中使用rowCount()不會受影響。你可以根據返回值決定是否提交或回滾事務。

小結

PDOStatement::rowCount是判斷數據庫寫操作是否生效的有力工具,尤其在需要給用戶提供反饋或執行邏輯判斷時非常有用。不過,開發者需要理解它在不同上下文中的表現,以避免誤解操作結果。

通過合理地使用rowCount() ,可以提升PHP 應用的健壯性和用戶體驗。如果你在開發中遇到不確定的數據庫操作效果,嘗試引入rowCount()來提升代碼的可控性與反饋能力。