第9章 データベース連携 / 第3回 模擬試験

PHPからMySQL等のデータベースへ接続する際のPDOのエラーモードに関する次の記述のうち、正しいものはどれか。

PDOのエラーモードを`PDO::ERRMODE_EXCEPTION`に設定すると、エラー発生時に例外がスローされる。 正解
PDOはエラーが発生しても、常に何も通知しない仕様である。
PDOのエラーモードは、一度設定すると変更できない。
PDOは接続エラーを検知する機能を持たない。
解説
PDOの属性`PDO::ATTR_ERRMODE`を`PDO::ERRMODE_EXCEPTION`に設定すると、以降にエラーが発生した際(SQL構文エラーなど)に`PDOException`がスローされるようになり、`try~catch`で捕捉して処理できます。 他の選択肢が誤りである理由は次の通りです。 ・PDOには複数のエラーモード(`ERRMODE_SILENT`, `ERRMODE_WARNING`, `ERRMODE_EXCEPTION`)があり、「常に何も通知しない」というのはモード全体の説明としては誤りです。 ・エラーモードは`$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);`のように、接続後いつでも変更できます。 ・PDOは接続に失敗すると`PDOException`をスローするため、接続エラーを検知できます。 例: ``` $pdo = new PDO($dsn, $user, $pass); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); try { $pdo->exec('INVALID SQL'); } catch (PDOException $e) { echo $e->getMessage(); } ``` (参照: 独習PHP 第4版 第9章 データベース連携 9.4.2節 例外処理の基本 p.430〜432)