2015-07-11 24 views
1

在我的節目,我想更新一些信息,所以我用:如何理解update語句是否成功運行?

return ($result->rowCount() == 1)? true: false; 

這樣,如果你保存的信息沒有任何改變,false返回,這是沒有結果的,通常我們預期。

更改我的功能,這一個

try{ 
     $result=$db->prepare($sql); 
      $result->execute($arr); 
      return true; 
     }catch(Exception $e){ 
      return false; 
     } 

是它的最好方法是什麼?這種方式是否可以保證更新聲明的工作與否?

+0

我確實在你的數據庫上執行了更新查詢,這是非常合乎邏輯的行爲,因爲爲什麼你會執行更新查詢如果沒有wi會改變嗎? – insanebits

+0

爲什麼不使用函數來顯示在所有數據庫連接器中實現的錯誤?由於您沒有告訴我們您正在使用哪種數據庫連接器,因此無法將您指向此處的文檔。但我相信你確實閱讀過文檔。我...你在閱讀文檔時,是不是? – arkascha

+0

@insanebits在某些情況下,您可能需要它 –

回答

0

假設你$db是當你運行PDO::prepare可以檢測SQL語法錯誤,當你運行PDO::execute,你一定會認爲語法是正確的PDO

實例。然後應用程序可以知道更新是否應該更新或不更新。

因此,這裏是一些示例代碼:

function update($db, $sql) 
{ 
    $preparedSql = $db->prepare($sql); 

    if(!$preparedSql) { 
     // syntax error occured 
     $errorInfo = $db->errorInfo(); 
     // handle error 
     return false; 
    } 

    $db->execute($preparedSql); 
    // note that rowCount returns 0 when none updated 
    return $db->rowCount(); 
} 

在您的應用程序

$result = update($db, $sql); 

if($result === false) 
{ 
    // error occured 
} elseif($result === 0) { 
    // zero rows updated 
} else { 
    // some rows were updated 
} 

請注意,這不是測試和學習之目的,update功能應該接受結合現實世界的應用參數

+0

錯誤發生在準備時間?如果在執行值不發送到數據庫什麼發生?或有錯誤的參數?假設我們發送參數作爲數組來執行 –