PDO::ATTR_ERRMODEにエラーモード属性を設定する必要があります。
また、prepare()メソッド実行で例外を投げられるようになっているので、PDO::ATTR_EMULATE_PREPARES機能を無効にしなければいけません。そうしないとMySQLサーバーはステートメントが実行されるまでそれを“見る”ことができません。
lang
1<?php
2<?php
3try {
4 $db = new PDO("mysql:dbname=testDB;host=localhost", 'root', 'password');
5 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
6 $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
7
8 $db->prepare('select * from hogehoge');
9}
10catch(Exception $e) {
11 var_dump($e->getMessage());
12}
13
プリント(私の場合)
lang
1string 'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'teratail.hogehoge' doesn't exist' (length=91)
http://wezfurlong.org/blog/2006/apr/using-pdo-mysql/
↑ここを確認してください。
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。