如何从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;