在使用PDO扩展执行数据库操作时,如果出现错误是不会直接显示在页面上的,需要通过 使用PDO::errorCode() 和 PDO::errorInfo() 这两个方法来查看错误的具体信息。当然,我们也可以通过改变PDO的错误处理模式来满足项目开发过程中的需求。
PDO的错误处理模式有3种
1、PDO::ERRMODE_SILENT 静默模式(默认模式)
此为默认模式。 PDO 将只简单地设置错误码,可使用 PDO::errorCode() 和 PDO::errorInfo() 方法来检查语句和数据库对象。如果错误是由于对语句对象的调用而产生的,那么可以调用那个对象的 PDOStatement::errorCode() 或 PDOStatement::errorInfo() 方法。如果错误是由于调用数据库对象而产生的,那么可以在数据库对象上调用上述两个方法。
默认模式下查看错误信息
<?php header('content-type:text/html;charset=utf-8'); try{ $pdo=new PDO('mysql:host=localhost;dbname=test','root','root'); $sql="select * from noneTable"; $pdo->query($sql); echo "<pre>"; var_dump($pdo->errorCode()); var_dump($pdo->errorInfo()); }catch(PDOException $e){ echo $e->getMessage(); }
2、PDO::ERRMODE_WARNING 警告模式
除设置错误码之外,PDO 还将发出一条传统的 E_WARNING 信息。如果只是想看看发生了什么问题且不中断应用程序的流程,那么此设置在调试/测试期间非常有用。
除了可以输出错误编码和错误信息外,还可以发出一条警告。
<?php header('content-type:text/html;charset=utf-8'); try{ $pdo=new PDO('mysql:host=localhost;dbname=test','root','root'); $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING); $sql="select * from noneTable"; $pdo->query($sql); echo "<pre>"; var_dump($pdo->errorCode()); var_dump($pdo->errorInfo()); }catch(PDOException $e){ echo $e->getMessage(); }
3、PDO::ERRMODE_EXCEPTION 异常模式
作为设置错误代号的附件,PDO会抛出一个PDOException异常并设置它的属性来反映错误代号和错误信息。这中设置在除错时也是很有用的,因为他会有效的“放大(blow up)”脚本中的出错点,非常快速的指向一个你代码中可能出错区域。(记住:如果异常导致脚本中断,事务处理回自动回滚。)
异常模式也是非常有用的,因为你可以使用比以前那种使用传统的PHP风格的错误处理结构更清晰的结构处理错误,比使用安静模式使用更少的代码及嵌套,也能够更加明确地检查每个数据库访问的返回值。
<?php header('content-type:text/html;charset=utf-8'); try{ $pdo=new PDO('mysql:host=localhost;dbname=test','root','root'); $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $sql="select * from noneTable"; $pdo->query($sql); echo "<pre>"; var_dump($pdo->errorCode()); var_dump($pdo->errorInfo()); }catch(PDOException $e){ echo $e->getMessage(); }