2012-03-15 61 views
1

我目前使用學說的DBAL庫MySQL的接口,並內置目前圍繞結構:使用Doctrine DBAL,如何確定更新失敗?

public function update(array $data, $id) 
{ 
    return $this->db->update($this->table, $data, array('id' => $id)); 
} 

這當然返回受影響的行數。現在的問題是我在更新成功後觸發更新後執行某些操作。在當前系統下,如果我要「編輯」一條記錄(僅顯示錶格)並立即點擊保存,則會返回一個錯誤,因爲我檢查上述更新函數的結果。這不僅會在我的網站中顯示錯誤,還會阻止其他「成功更新」操作運行。

有沒有辦法查看更新是否無法在受影響的行之外運行?我可以完全忽略這一點,並假設更新始終有效嗎?捕獲異常是否足以捕獲任何致命錯誤?

回答

1

您可以假設更新始終有效。主要問題例如無效字段名稱或約束違規將引發異常。考慮做一些測試用例來說服你自己。

請注意,update()方法不會轉義,因此您需要清理數據。

1

在現行制度下,如果我是「編輯」的記錄(展示形式 只),並立即從我檢查更新功能的上述

的 結果點擊保存它返回一個錯誤

不要忘記,$this->db->update()返回受影響的行數(或失敗時爲false)。如果您只需打開「編輯」,然後單擊「保存」,不會有數據的變化,「受影響的行」將是0要返回的成功或失敗$this->db->update(...)您可以使用false !==

if ($myModel->update($data, $id)) { 
    echo "success"; 
} 

和在您的myModel中:

public function update(array $data, $id) 
{ 
    return false !== $this->db->update(...); 
}