>> PHP入門トップに戻る
今までPDOについて説明してきましたが、今度はPDOの例外処理について説明したいと思います。
以下のようなテーブルを準備してください。
これではエラー発生時に対処できないため、エラー時には例外を発生させる必要があります。
例外を発生させるにはPDOオブジェクトのsetAttributeメソッドで設定が必要になります。
以下のコードを見てください。
これでPDO関連でエラーが発生した場合は「PDOException」の例外が発生するようになるので、「try~catch」構文で例外をキャッチできます。
実際に実行してみると以下のようになります。
catchブロック内のPDOExceptionオブジェクトから「getMessage」と「getLine」メソッドを実行してエラーメッセージと行番号を取得して表示しているというわけです。
例外が発生したので、try内に書いている「AAAAAAAA」というecho文は表示されず、エラーメッセージと、その後の「BBBBBBBBB」というecho文が表示されました。
これでエラー時の対処はできそうですね。
DB関連の処理は色んなテーブルの登録・削除が発生するので例外処理は確実に設定しておきたいものです。
忘れずに設定しておきましょう。
>> 【PDOトランザクション、自動コミットモードをオフ】に進む
>> PHP入門トップに戻る
PDO 例外処理 try catch
以下のようなテーブルを準備してください。
mysql> select * from test; +----+------+------+ | id | num | name | +----+------+------+ | 1 | 1 | AAA | | 2 | 10 | BBB | | 3 | 100 | CCC | | 4 | 1000 | DDD | +----+------+------+今までprepareやexecuteなどのPDO関連の関数を実行してきましたが、特に何も設定していない場合はクエリの構文等でエラーがあっても例外は発生しません。
これではエラー発生時に対処できないため、エラー時には例外を発生させる必要があります。
例外を発生させるにはPDOオブジェクトのsetAttributeメソッドで設定が必要になります。
以下のコードを見てください。
try{ //PDOオブジェクトの生成 $pdo = new PDO("mysql:dbname=test;host=localhost",USERNAME,PASSWORD); //PDOのエラー時に例外(PDOException)が発生するように設定 $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //構文エラーを発生させる。 $pdo->exec("updateeee test set name = 'aaa' where id = 1"); //ここは実行されない echo "AAAAAAAAAAAA".PHP_EOL; }catch(PDOException $e){ //エラーメッセージと行番号表示 echo $e->getMessage()." - ".$e->getLine().PHP_EOL; } //ここは実行される echo "BBBBBBBBBBBB".PHP_EOL;setAttributeメソッドの第一引数に「PDO::ATTR_ERRMODE」、第二引数に「PDO::ERRMODE_EXCEPTION」を指定します。
これでPDO関連でエラーが発生した場合は「PDOException」の例外が発生するようになるので、「try~catch」構文で例外をキャッチできます。
実際に実行してみると以下のようになります。
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'updateeee test set name = 'aaa' where id = 1' at line 1 - 248 BBBBBBBBBBBBエラー発生時の詳細なメッセージとエラーが発生した行番号を表示しています。
catchブロック内のPDOExceptionオブジェクトから「getMessage」と「getLine」メソッドを実行してエラーメッセージと行番号を取得して表示しているというわけです。
例外が発生したので、try内に書いている「AAAAAAAA」というecho文は表示されず、エラーメッセージと、その後の「BBBBBBBBB」というecho文が表示されました。
これでエラー時の対処はできそうですね。
DB関連の処理は色んなテーブルの登録・削除が発生するので例外処理は確実に設定しておきたいものです。
忘れずに設定しておきましょう。
>> 【PDOトランザクション、自動コミットモードをオフ】に進む
>> PHP入門トップに戻る