如何从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处理程序
启用MySQL的PDO驱动程序
客户端API版本mysqlnd 5.0.7-dev – 091210 – $ Revision:300533 $

我能做些什么来获取错误信息?

setAttribute 导致PDO抛出错误或exception – 最近执行查询时。

对于模拟的预处理语句, prepare()没有检查:

仿真准备语句不与数据库服务器通信,所以PDO :: prepare()不检查语句。

但是当查询被发送到服务器时, execute()会有一个。

然而,mySQL驱动程序支持自mySQL 4.1以来的本地准备语句,所以这不应该适用。 运用

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

必须为您使用的查询导致exception。

我也试图从数据库句柄级别的errorInfo()获取信息,但是我最终从PDOStatement::errorInfo()获取了语句级别的信息。

根据PHP网站:

PDO :: errorInfo()仅检索直接在数据库句柄上执行的操作的错误信息。 如果通过PDO :: prepare()或PDO :: query()创buildPDOStatement对象,并在语句句柄上调用错误,则PDO :: errorInfo()不会反映语句句柄中的错误。 您必须调用PDOStatement :: errorInfo()以返回在特定语句句柄上执行的操作的错误信息。

您需要先execute查询,然后检查错误:所以要这样做:

  $sth->execute(); 

然后检查错误。 那么你会得到错误,如果有的话。

这将打印错误代码以及相应的详细消息。

build议:这只是一个示范。 只是用于debugging目的。 不要在发布版本中向公众显示错误消息。

 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;