第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)