Как сжать сообщение об ошибке из PDO?

Я не могу получить сообщение об ошибке из PDO:

#$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING ); try { $sth = $dbh->prepare('@$%T$!!!'); print_r($sth); print_r($dbh->errorInfo()); } catch (PDOException $e) { echo $e->getMessage(); } 

Он выдаёт только:

 PDOStatement Object ( [queryString] => @$%T$!!! ) Array ( [0] => 00000 [1] => [2] => ) 

setAttribute ничего не помогает.

Это PHP 5.3.3. Обработчик Apache 2.0
Драйвер PDO для MySQL включен
Версия клиентского API mysqlnd 5.0.7-dev – 091210 – $ Версия: 300533 $

Что я могу сделать, чтобы получить информацию об ошибках?

Related of "Как сжать сообщение об ошибке из PDO?"

setAttribute заставит PDO вызывать ошибки или исключения – последние, когда вы выполняете запрос.

Для эмулируемых подготовленных заявлений нет проверки в prepare() :

Эмулированные подготовленные операторы не взаимодействуют с сервером базы данных, поэтому PDO :: prepare () не проверяет инструкцию.

Но будет один в execute() когда запрос будет отправлен на сервер.

Однако драйвер mySQL поддерживает встроенные подготовленные операторы с mySQL 4.1 в любом случае, поэтому это не должно применяться. С помощью

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

должен вызвать исключение для используемого вами запроса.

Я тоже пытался получить информацию от errorInfo() на уровне дескриптора базы данных, но в итоге я получил информацию с уровня инструкции с помощью PDOStatement::errorInfo()

На веб-сайте PHP:

PDO :: errorInfo () только извлекает информацию об ошибках для операций, выполняемых непосредственно в дескрипторе базы данных. Если вы создаете объект PDOStatement через PDO :: prepare () или PDO :: query () и вызывают ошибку в дескрипторе оператора, PDO :: errorInfo () не будет отражать ошибку из дескриптора оператора. Вы должны вызвать PDOStatement :: errorInfo (), чтобы вернуть информацию об ошибке для операции, выполняемой на конкретном дескрипторе оператора.

Вам нужно сначала execute запрос, а затем проверить наличие ошибок. Так что сделайте так:

  $sth->execute(); 

а затем проверьте наличие ошибок. Тогда вы получите ошибки, если они есть.

Это напечатает код ошибки, а также соответствующее подробное сообщение.

Совет: это всего лишь демонстрация. Просто используйте для целей отладки. Не разрешать показывать сообщения об ошибках публике в выпускной версии.

 try{ connection=$this->get_connection();//here i brought my connection string connection->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); connection->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); /** Do your works here.. //$statement=$connection->prepare($sql); //if you are using errorInfo use after prepare statement before execute.here in this method i am not using it. //print_r($statement->errorInfo()); **/ $statement->execute(); } catch(PDOException $e) { //this will echo error code with detail //example: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'nasme' in 'field list' echo $e->getMessage(); } //$statement=null;