簡體   English   中英

PHP PDO MySQL在沒有行受影響時檢查更新查詢是否成功的正確方法

[英]PHP PDO MySQL Correct way to check if an update query succeeded when no rows are affected

使用php pdo和mysql時,確定更新查詢是否成功的確定方法是什么?

在我的應用程序中,我更新了提交但是用戶的項目總數,表格如下所示:

項目

userId | itemsAdded | itemsChecked | itemsUnChecked | itemsTotal
     1 |          5 |            2 |              3 |          5

因此,當我update items set itemTotals = itemsChecked+itemUnChecked itemsTotal列保持不變,除非itemsAdded更改且itemsUnChecked增加(2 + 3等於5,1 + 4也是5)。

我曾經使用rowCount()來檢查查詢是否成功,但在這種情況下,由於itemsTotal列保持不變,因此無法確定sql是否成功。

$query = $conn->prepare($sql);

$query->execute(array(

    ":itemCount" => $itemCount
    ":itemId" => $itemId
));

$queryCount = $query->rowCount();

if($queryCount == 1) {
    echo 'Updated succeeded';
} else {
    echo 'Updated failed!';
}

我也可以用:

$query = $conn->prepare($sql);

$result = $query->execute(array(

    ":itemCount" => $itemCount
    ":itemId" => $itemId
));

if($result) {
    echo 'Updated succeeded';
} else {
    echo 'Updated failed!';
}

但是,如果查詢成功或基於更新的行數,它會返回true還是false?

我只需要檢查查詢是否成功。 無需告知已更新的行數。

當執行SQL語句失敗時, execute()方法將拋出異常或返回FALSE(取決於您為數據庫連接設置的錯誤模式)。

如果我們在執行語句之前(通常在建立數據庫連接之后立即)將錯誤模式設置為拋出異常,就像這樣

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

然后我們可以使用try / catch塊來處理SQL語句拋出的異常。 像這樣的東西:

try {
  $query->execute(...);
  echo 'Update succeeded';

} catch(PDOException $e) {
  echo 'Update failed!';
  echo 'Error: ' . $e->getMessage();
}

有關錯誤模式設置和處理的信息,請參見以下文檔: http//php.net/manual/en/pdo.error-handling.php


或者,如果PDO未設置為拋出異常,我們可以使用簡單的if測試。 (如果語句失敗, execute()方法將返回FALSE。)

if ($query->execute(...)) {
   echo 'Update succeeded';

} else {
   echo 'Update failed!';

}

為了更精確地控制不同類型的故障,我們可以使用errorCode()方法來檢索與語句句柄上的最后一個操作相關聯的SQLSTATE,並且我們可以對返回的值執行條件測試。 http://php.net/manual/en/pdostatement.errorcode.php

即使沒有影響行也不意味着更新失敗,就像你說的那樣,沒有任何改變。 如果拋出異常,它只會失敗。 要處理這個問題,您需要實現try / catch塊。

http://php.net/manual/en/language.exceptions.php

try{
    $query = $conn->prepare($sql);      
    $result = $query->execute(array(    
        ":itemCount" => $itemCount
        ":itemId" => $itemId
    ));
    echo 'Updated succeeded';
} catch(Exception $e) {
    echo 'Updated failed!';
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM