Почему ошибка исключения PDO не попала?

У меня есть PHP-скрипт с двумя преднамеренными ошибками typo в инструкции для SQL-запроса:

try { $stmt = $dbh->prepare("SELECT COUNT(*) FROM Product WHERE non-existent_column=?"); $stmt->blindValue(1, $id, PDO::PARAM_INT); $stmt->execute(); $row = $stmt->fetchColumn(); } catch(PDOException $err) { var_dump($err->getMessage()); var_dump($dbh->errorInfo()); } 

Однако скрипт не PDO::ERRMODE_EXCEPTION ошибку даже после установки атрибута PDO::ERRMODE_EXCEPTION . Что мне здесь не хватает?

ОБНОВИТЬ:

Это полный скрипт. Вторая опечатка blindValue вернулась назад. Ошибка остается неотображенной:

 <?php $user= "user"; $password = "password"; $dsn = "mysql:dbname=Catalogue;host=localhost"; $dbh = new PDO($dsn, $user, $password); $dbh->setAttribute(PDO::ERRMODE_EXCEPTION); $id = 1000; try { $stmt = $dbh->prepare("SELECT COUNT(*) FROM Product WHERE non-existent_column=?"); $stmt->bindValue(1, $id, PDO::PARAM_INT); $stmt->execute(); $row = $stmt->fetchColumn(); } catch(PDOException $err) { echo "caught"; var_dump($err->getMessage()); var_dump($dbh->errorInfo()); exit(); } var_dump($stmt); var_dump($row); echo "uncaught"; exit(); ?> 

В вашем вызове setAttribute () отсутствует первый параметр:

 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

Если вы не получили

 Warning: PDO::setAttribute() expects exactly 2 parameters, 1 given 

ваш уровень error_reporting слишком низок для сервера разработки и / или вы не следили за журналом ошибок или не устанавливали display_errors = On (что вам больше нравится, я предпочитаю журнал ошибок над display_errors).


редактирование: пожалуйста, попробуйте

 <?php echo 'php version: ', phpversion(), "\n"; try { $dbh = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly'); echo 'client version: ', $dbh->getAttribute(PDO::ATTR_CLIENT_VERSION), "\n"; echo 'server version: ', $dbh->getAttribute(PDO::ATTR_SERVER_VERSION), "\n"; $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); } catch(PDOException $err) { var_dump($err->getMessage()); die('...'); } $id = 'foo'; try { $stmt = $dbh->prepare("SELECT COUNT(*) FROM Product WHERE `non-existent_column`=?"); $stmt->bindValue(1, $id, PDO::PARAM_INT); $stmt->execute(); $row = $stmt->fetchColumn(); } catch(PDOException $err) { var_dump($err->getMessage()); var_dump($dbh->errorInfo()); die('....'); } echo 'done.'; 

напечатан на моей машине

 php version: 5.3.5 client version: mysqlnd 5.0.7-dev - 091210 - $Revision: 304625 $ server version: 5.5.8 string(94) "SQLSTATE[42S22]: Column not found: 1054 Unknown column 'non-existent_column' in 'where clause'" array(3) { [0]=> string(5) "42S22" [1]=> int(1054) [2]=> string(54) "Unknown column 'non-existent_column' in 'where clause'" } .... 
 $stmt->blindValue(1, $id, PDO::PARAM_INT); 

Это должно быть $stmt->bindValue(1, $id, PDO::PARAM_INT);

Вы не можете обнаружить Fatal Errors, например, вызов неопределенной функции / метода.

Я испытал это и понял, что это мой файл конфигурации PHP.

xdebug.show_exception_trace = 1

Исключения будут всегда отображаться, если это верно.