对象方式
PDO 是基于向对象方式,那么错误处理也最好使用面向对象的方式来处理。在 PDOException 中定义了如下方法用于捕获错误信息:
方法
说明
getMessage()
取得文本化的错误信息
getCode()
取得 SQLSTATE 错误代号
getFile()
取得发生异常的文件名
getLine()
取得 PHP 程序产生异常的代码所在行号
getTrace()
backtrace() 数组
getTraceAsString()
取得已格成化成字符串的 getTrace() 信息
例子:
try{
//构造PDO连接
$dbh = "mysql:host=localhost;dbname=test";
$db = new PDO($dbh, 'root', 'root123123'); //密码错误
} catch (PDOException $e) {
print "错误: ".$e->getMessage()."
";
print "行号: ".$e->getLine()."
";
die();
}
?>
运行该例子,浏览器输出:
错误: SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: YES)
行号: 5
过程方式
PDO 也支持使用面向过程的方式来处理 PDO 错误。PDO 和 PDOStatement 对象有 errorCode() 及 errorInfo() 方法,如果没有任何错误,errorCode() 返回的是:00000 ,否则就会返回错误代码。
对前面的数据库操作加上错误处理的例子:
//表名错误
$sql = "UPDATE user1 SET email='xiaochen@163.com' WHERE username='小陈'";
$count = $db->exec($sql);
if ($db->errorCode() != '00000'){
$error = $db->errorInfo();
echo '错误: [',$error['1'],'] ',$error['2'];
die();
}
echo '更新 ',$count,' 条数据记录!';
运行该例子,浏览器输出:
错误: [1146] Table 'test.user1' doesn't exist
errorInfo() 方法返回的是一个数组,第一个键值为 SQLSTATE 错误代码,第二个键值为数据库具体的错误代码,第三个为错误文本信息。