先說 預設模式
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
我做的實驗中,出錯後,會給 $pdo->errorCode() 和 $pdo->errorInfo() 賦值;通過調用他們可以可以 看 錯誤的詳細資料;
然後說例外模式
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);try{}catch(PDOException $e){ echo "執行命令失敗:".$e->getMessage(); exit;}
會執行個體出一個 $e 對象,錯誤資訊儲存在這個屬性裡.
都是有錯誤資訊,為什麼要分兩個屬性?
回複內容:
先說 預設模式
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
我做的實驗中,出錯後,會給 $pdo->errorCode() 和 $pdo->errorInfo() 賦值;通過調用他們可以可以 看 錯誤的詳細資料;
然後說例外模式
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);try{}catch(PDOException $e){ echo "執行命令失敗:".$e->getMessage(); exit;}
會執行個體出一個 $e 對象,錯誤資訊儲存在這個屬性裡.
都是有錯誤資訊,為什麼要分兩個屬性?
/*錯誤模式說明:
◆異常模式: $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 這個模式需要配合 try 使用 : 一旦出錯,就會: 1.建立一個對象,$e 也可以隨便命名,從 $e->getMessage() 擷取錯誤資訊; 2.採取動作; 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出一個錯誤資訊,打亂了指令碼; 學習調試的時候使用比較好; 真用起來的時候,很多時候判斷不出到底指令碼有沒有出錯;
*/
你太糾結了...這是為了方便使用者,為啥一定要有個為什麼。就像是有些API通過參數可以選擇返回json還是xml,有什麼特別的意義嗎?也是為了方便而已。