>> 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入門トップに戻る













