PDO利用時の例外処理について
調べてもどれがベストなのか、正解が出てこなかったので質問させてください。
PDOのエラー発生時に例外を投げるように設定しています。
PHP
1try { 2 $pdo = new PDO($dsn, $user, $pass, $options); 3 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 4 5 // なんかの処理 6 7} catch (PDOException $ex) { 8 // 例外処理 9}
とした場合、順序として
- エラー発生時、自動的にPDOがPDOExceptionを投げる
- 投げられたPDOExceptionをcatchで受け取る
ということは理解しました。
しかし、本やネットによっては
PHP
1try { 2 $pdo = new PDO($dsn, $user, $pass, $options); 3 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 4 5 // なんかの処理 6 7} catch (Exception $ex) { 8 // 例外処理 9}
としているところもありました。(Exceptionを受け取っている)
継承の関係でExceptionでも受け取れる
ということも、なんとなく…、ですが一応理解しました。
じゃあ、catch時、Exceptionで受け取った場合とPDOExceptionで受け取った場合の違いって、一体何なんでしょうか?
どちらで書くべきですか?
それとすみません、関連した質問として
VBAのGotoステートメントのように例外を分けたいのですが
PHP
1try { 2 // なんかの処理 3 if ($err1) throw new Exception("", 10); 4 if ($err2) throw new Exception("", 20); 5 if ($err3) throw new Exception("エラーが発生しました。", 99); 6 7} catch (Exception $ex) { 8 // 例外処理 9 if ($ex->getCode() === 99){ 10 echo $ex->getMessage(); 11 } else{ 12 header("HTTP/1.0 404 Not Found"); 13 exit(); 14 } 15}
といった感じで
投げたCodeで処理を分けるのって、一般的に見てアリですか?
(イマイチExceptionの使い方が分からなかったので…)
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。