PDO::ERRMODE_EXCEPTION PDO::ERRMODE_WARNING 區別是什麼?
我怎麼看了以後,覺得這倆除了反饋資訊的格式不一樣外,別的看起來都一樣?
就是講解的時候有個"拋出"一詞,誰可以簡單的跟我說說什麼區別?
回複內容:
PDO::ERRMODE_EXCEPTION PDO::ERRMODE_WARNING 區別是什麼?
我怎麼看了以後,覺得這倆除了反饋資訊的格式不一樣外,別的看起來都一樣?
就是講解的時候有個"拋出"一詞,誰可以簡單的跟我說說什麼區別?
錯誤模式說明:
這個模式需要配合 try 使用 :
一旦出錯,就會:
建立一個對象,$e 也可以隨便命名,從 $e->getMessage() 擷取錯誤資訊;
採取動作;
try{ 要執行的命令...}catch(PDOException $e){ echo "執行命令失敗:".$e->getMessage(); 失敗後的動作...}
這個其實等於 預設模式
的 if($pdo->errorInfo()[2]) ...
建立PDO的時候,為什麼也用 try?
因為這時候連PDO對象都沒有,所以也不能設定錯誤模式,所以可以用try,
一旦PDO建立成功,錯誤模式就成了 預設模式
,也就不能用try了.
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
這個出錯,會給 $pdo->errorCode()
和 $pdo->errorInfo()[2]
賦值;
可以用 if($pdo->errorInfo()[2])
和if($pdo->errorCode())
判斷指令碼是不是出錯.
如果不出錯,上面都是空的;
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
這個會echo出一個錯誤資訊,打亂了指令碼;
學習調試的時候使用比較好;
真用起來的時候,很多時候判斷不出到底指令碼有沒有出錯;
請注意PHP的錯誤等級一文。
Warning
層級的錯誤,會直接顯示在頁面上,且無法自行根據錯誤處理相關的商務邏輯。
Exception
則是拋出一個可以被捕獲的Exception
對象,可以擷取到詳細的異常資訊。
try { $stmt = $pdo->prepare("select * from id = :id"); // PGSQL嚴格限制資料類型,serial欄位使用字串欄位進行匹配將會出錯 $stmt->bindValue(':id','string',PDO::PARAM_STR); $stmt->execute(); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);} catch (PDOException $e) { // PDO執行出錯時執行 // 可以捕獲到PDO拋出的異常,可以擷取到詳細的錯誤碼,錯誤描述,哪個檔案第幾行出錯,本次請求中所有執行的檔案等等 var_dump($e);}