按照要求我重新格式化的問題:會返回一個錯誤的PDO執行()與拋出的異常相同嗎?
對於下面的代碼:
$newPDO=new PDO($DSN,$USER,$PASS);
$newPDO->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$SQL='SOME SQL STATEMENT MAYBE FAULTY';
try{
$Query=$newPDO->Prepare($SQL)
$Success=$Query->execute();
if(!$Success)
echo('A');
}
catch(PDOException $e)
{
echo('B');
}
的問題是,是否有可能看到「A」印刷?對於選擇或插入的不同類型的$SQL
,答案會不同嗎?
原題:
- 首先,我的屬性設置爲PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION,所以,我認爲,當執行()遇到從數據庫中的錯誤,它應該拋出例外。 然後我意識到,如果這是真的,只要拋出的異常與返回的'false'相同,我甚至可能不必檢查execute()的返回值。我只需要從外面抓到。如果沒有發現,查詢應該沒問題。
但我不確定這是因爲execute()不會根據手冊默認拋出異常。當我插入某些東西時,我嘗試了幾次操作,如重複PK和唯一約束違規。我的斷言得到支持:PDO將拋出一個異常,我可以從數據庫中獲取detaield錯誤消息。 但是我不知道這是否是一個普遍的事實。是否有可能從execute()中獲得false,並且當我將ERRMODE設置爲最大值時拋出PDOEXCEPTION? *
如果啓用異常,那麼PDO在失敗時拋出異常,它不會返回false。檢查錯誤沒有意義,因爲執行會立即跳轉到任何相關的catch塊。 – 2016-08-18 15:21:22
這是預期的行爲,但execute()似乎並不總是拋出異常。其實際上這個問題是關於什麼的。 – Niksac 2016-08-18 15:55:09