PDO错误机制
PDO提供了3种不同的错误处理模式,以满足不同风格的应用开发。具体如下。
(1)SILENT模式(默认)
PDO::ERRMODE_SILENT为PDO默认的错误处理模式。此模式在错误发生时不进行任何操作,只简单的设置错误代码,用户可以通过PDO类提供的errorCode()和errorInfo()这两个方法对语句和数据库对象进行检查。如果错误是由于调用语句对象PDOStatement而产生的,那么可以使用这个对象调用这两个方法;如果错误是由于调用数据库对象而产生的,那么可以使用数据库对象调用上述两个方法。
(2)WARNING模式
在项目的调试或测试期间,如果想要查看发生了什么问题且不中断程序的流程,可以将PDO的错误模式设置为PDO::ERRMODE_WARNING。当错误发生时,除了设置错误代码外,PDO还会发出一条E_WARNING信息。
(3)EXCEPTION模式
PDO中提供的PDO::ERRMODE_EXCEPTION错误模式,可以在错误发生时抛出相关异常。它在项目调试当中较为实用,可以快速的找到代码中问题的潜在区域,与其他发出警告的错误模式相比,用户可以自定义异常,检查每个数据库调用的返回值时,异常模式需要的代码更少。
在前面的代码演示中,都是使用的PDO默认错误处理模式,下面分别对另外2种错误处理模式进行代码演示。
创建C:\web\apache2.4\htdocs\pdo04.php文件,具体代码如下。
1 <?php
2 $dsn = 'mysql:host=localhost;port=3306;dbname=mydb;charset=utf8';
3 $pdo = new PDO($dsn, 'root', '123456');
4 // 设置错误模式
5 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
6 // 预处理SQL语句
7 $stmt = $pdo->prepare('SELECT * FROM `test`');
8 // 执行预处理语句,若execute()方法返回false,表示执行失败
9 if (false === $stmt->execute()) {
10 echo '错误码:' . $stmt->errorCode().'<br>'; // 输出错误码
11 print_r($stmt->errorInfo()); // 输出错误信息
12 }
上述代码执行后,运行结果如图1所示。
图1 WARNING模式
从图1中可以看出,WARNING模式下PDO执行发生错误,会发出一条提示信息,但不会中断程序的继续执行。接下来更改第5行代码中的模式,对比不同模式下,PDO执行发生错误的不同处理方式。
1 // 设置EXCEPTION错误模式
2 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
3 // 预处理SQL语句
4 $stmt = $pdo->prepare('SELECT * FROM `test`');
5 try{
6 $stmt->execute();
7 }catch(PDOException $e){
8 // 进行异常处理
9 }
在EXCEPTION错误模式下,PDO执行过程中如果有错误产生,可在catch语句中输出错误信息。