PHP中PDO的错误处理


Posted in PHP onSeptember 04, 2011

面向对象的方式
先看看如果连接错误等的处理,PHP中PDO的错误处理,使用面向对象的方式来处理:

<?php 
try { 
 $db = new PDO('mysql:host=localhost;dbname=test', $user, $pass); 
 $db = null; 
} catch (PDOException $e) { 
 print "Error: " . $e->getMessage() . "<br/>"; 
 die(); 
} 
?>

这里利用我们PHP 5面向对象的异常处理特征,如果里面有异常的话就初始化调用PDOException来初始化一个异常类。
PDOException异常类的属性结构:
<?php 
class PDOException extends Exception 
{ 
 public $errorInfo = null; // 错误信息,可以调用 PDO::errorInfo() 或 PDOStatement::errorInfo()来访问 
 protected $message; // 异常信息,可以试用 Exception::getMessage() 来访问 
 protected $code; // SQL状态错误代码,可以使用 Exception::getCode() 来访问 
} 
?>

这个异常处理类是集成PHP 5内置的异常处理类,我们简单的看一下PHP 5内置的异常处理类结构:
<?php 
class Exception 
{ 
 // 属性 
 protected $message = 'Unknown exception'; // 异常信息 
 protected $code = 0; // 用户自定义异常代码 
 protected $file; // 发生异常的文件名 
 protected $line; // 发生异常的代码行号 
 // 方法 
 final function getMessage(); // 返回异常信息 
 final function getCode(); // 返回异常代码 
 final function getFile(); // 返回发生异常的文件名 
 final function getLine(); // 返回发生异常的代码行号 
 final function getTrace(); // backtrace() 数组 
 final function getTraceAsString(); // 已格成化成字符串的 getTrace() 信息 
} 
?>

相应的,在代码中可以合适的调用 getFile() 和 getLine() 来进行错误定位,更方便的进行调试。
使用面向过程的方法
先看代码:
<? 
$db = new PDO('mysql:host=localhost;dbname=test', $user, $pass); 
$rs = $db->query("SELECT aa,bb,cc FROM foo"); 
if ($db->errorCode() != '00000'){ 
 print_r($db->errorInfo()); 
 exit; 
} 
$arr = $rs->fetchAll(); 
print_r($arr); 
$db = null; 
?>

PDO和PDOStatement对象有errorCode() 和 errorInfo() 方法,如果没有任何错误, errorCode() 返回的是: 00000 ,否则就会返回一些错误代码。errorInfo() 返回的一个数组,包括PHP定义的错误代码和MySQL的错误代码和错误信息,数组结构如下:
Array
(
 [0] => 42S22
 [1] => 1054
 [2] => Unknown column 'aaa' in 'field list'
)
每次执行查询以后,errorCode() 的结果都是最新的,所以我们可以很容易自己控制错误信息显示。
在使用PDO进行那个PHP和数据库开发过程中,如果再碰到错误咋办?按照上面的方式处理吧。

11.3.4 PDO的错误处理

PDO提供了两个获得程序中的错误信息的方法,一个是errorCode()方法;另一个是errorInfo()方法。

1.errorCode()方法

errorCode()方法用于获取在操作数据库句柄时所发生的错误代码,这些错误代码被称为SQLSTATE代码,该方法的语法格式如下:

01 string errorCode ( void ) errorCode()方法的返回值为一个SQLSTATE,SQLSTATE是由5个数字和字母组成的代码。下面是使用errorCode()方法的示例:

【程序11-17】光盘\code\11\pdo\errorCode.php

<?php 
$dsn = 'mysql:dbname=shop;host=localhost'; 
$user_name = 'root'; 
$user_psw = 'root'; 
$pdo = new PDO($dsn, $user_name, $user_psw); 
$pdo->exec("update mytable set age=28 where id=1 ");//表mytable不存在 
echo "errorCode为: ".$pdo->errorCode(); 
?>

上述代码输出的错误代码如图11-13所示。
PHP中PDO的错误处理
2.errorInfo()方法

errorInfo()方法用于获得操作数据库句柄时所发生的错误信息,该方法的语法格式如下:

01 array errorInfo ( void ) errorInfo()方法的返回值为一个数组,该数组里面包含了相关的错误信息,使用errorInfo()方法的示例代码如下:

【程序11-18】光盘\code\11\pdo\errorInfo.php

<?php 
$dsn = 'mysql:dbname=shop;host=localhost'; 
$user_name = 'root'; 
$user_psw = 'root'; 
$pdo = new PDO($dsn, $user_name, $user_psw); 
$pdo->exec("update mytable set age=28 where id=1 ");//表mytable不存在 
echo "errorInfo为: "; 
print_r($pdo->errorInfo()); 
?>

上面代码输出的错误信息如图11-14所示。
PHP中PDO的错误处理
PHP 相关文章推荐
FireFox浏览器使用Javascript上传大文件
Oct 30 PHP
php生成缩略图示例代码分享(使用gd库实现)
Jan 20 PHP
php获取网页中图片、DIV内容的简单方法
Jun 19 PHP
3款值得推荐的微信开发开源框架
Oct 28 PHP
Yii中表单用法实例详解
Jan 05 PHP
php生成图片验证码的方法
Apr 15 PHP
thinkphp中AJAX返回ajaxReturn()方法分析
Dec 06 PHP
PHP7内核之Reference详解
Mar 14 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
Oct 03 PHP
PHP时间相关常用函数用法示例
Jun 03 PHP
PHP类的自动加载与命名空间用法实例分析
Jun 05 PHP
laravel ajax curd 搜索登录判断功能的实现
Apr 17 PHP
php中将网址转换为超链接的函数
Sep 02 #PHP
php ajax 静态分页过程形式
Sep 02 #PHP
php中防止伪造跨站请求的小招式
Sep 02 #PHP
10个实用的PHP代码片段
Sep 02 #PHP
PHP文件操作实现代码分享
Sep 01 #PHP
深入探讨PHP中的内存管理问题
Aug 31 #PHP
php中使用Imagick实现图像直方图的实现代码
Aug 30 #PHP
You might like
php出现web系统多域名登录失败的解决方法
2014/09/30 PHP
PHP基于GD库的图像处理方法小结
2016/09/27 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
2018/10/12 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
JavaScript中的Math.LOG2E属性使用详解
2015/06/14 Javascript
JavaScript实现自定义媒体播放器方法介绍
2017/01/03 Javascript
vue拦截器Vue.http.interceptors.push使用详解
2017/04/22 Javascript
微信小程序的生命周期的详解
2017/10/19 Javascript
引入外部js脚本加载慢与页面白屏问题的解决
2018/12/10 Javascript
es6数组之扩展运算符操作实例分析
2020/04/25 Javascript
vue项目使用$router.go(-1)返回时刷新原来的界面操作
2020/07/26 Javascript
[01:14:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Orenda
2014/05/22 DOTA
优化Python代码使其加快作用域内的查找
2015/03/30 Python
在Python中定义和使用抽象类的方法
2016/06/30 Python
怎样使用Python脚本日志功能
2016/08/14 Python
Python入门_条件控制(详解)
2017/05/16 Python
Python编程实现的简单Web服务器示例
2017/06/22 Python
Python实现的txt文件去重功能示例
2018/07/07 Python
django中media媒体路径设置的步骤
2019/11/15 Python
wxPython实现画图板
2020/08/27 Python
Python中类似于jquery的pyquery库用法分析
2019/12/02 Python
python操作微信自动发消息的实现(微信聊天机器人)
2020/07/14 Python
python学习笔记之多进程
2020/08/06 Python
前端H5 Video常见使用场景简介
2020/08/21 HTML / CSS
美国电子元器件分销商:Newark element14
2018/01/13 全球购物
瑞士灯具购物网站:Lampenwelt.ch
2018/07/08 全球购物
世界排名第一的万圣节服装店:Spirit Halloween
2018/10/16 全球购物
法国低价在线宠物商店:bitiba.fr
2020/07/03 全球购物
Prototype中如何为一个元素添加一个方法
2014/12/08 面试题
单位工程竣工验收方案
2014/03/16 职场文书
员工年度工作总结2015
2015/05/18 职场文书
优质服务标语口号
2015/12/26 职场文书
中国梦党课学习心得体会
2016/01/05 职场文书
高中历史教学反思
2016/02/19 职场文书
vue中利用mqtt服务端实现即时通讯的步骤记录
2021/07/01 Vue.js
Java使用jmeter进行压力测试
2021/07/09 Java/Android