学科分类
目录
PHP基础

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所示。

img

图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语句中输出错误信息。

点击此处
隐藏目录