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 相关文章推荐
PHP 批量删除数据的方法分析
Oct 30 PHP
php验证手机号码(支持归属地查询及编码为UTF8)
Feb 01 PHP
php不允许用户提交空表单(php空值判断)
Nov 12 PHP
Php连接及读取和写入mysql数据库的常用代码
Aug 11 PHP
PHP中实现接收多个name相同但Value不相同表单数据实例
Feb 03 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
Mar 25 PHP
php文件系统处理方法小结
May 23 PHP
Laravel实现定时任务的示例代码
Aug 10 PHP
Laravel框架中Blade模板的用法示例
Aug 30 PHP
PHP实现可精确验证身份证号码的工具类示例
May 31 PHP
php转换上传word文件为PDF的方法【基于COM组件】
Jun 10 PHP
关于php开启错误提示的总结
Sep 24 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扩展函数
2006/10/09 PHP
php返回当前日期或者指定日期是周几
2015/05/21 PHP
php+curl 发送图片处理代码分享
2015/07/09 PHP
6个超实用的PHP代码片段
2015/08/10 PHP
PHP根据key删除数组中指定的元素
2019/02/28 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
javascript对talbe进行动态添加、删除、验证实现代码
2012/03/29 Javascript
js 利用image对象实现图片的预加载提高访问速度
2013/03/29 Javascript
JavaScript实现更改网页背景与字体颜色的方法
2015/02/02 Javascript
jQuery插件Skippr实现焦点图幻灯片特效
2015/04/12 Javascript
text-align:justify实现文本两端对齐 兼容IE
2015/08/19 Javascript
JavaScript实现显示函数调用堆栈的方法
2016/04/21 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
2016/07/22 Javascript
JS实现快速的导航下拉菜单动画效果附源码下载
2016/11/01 Javascript
js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法
2016/11/21 Javascript
JS实现移动端整屏滑动的实例代码
2017/11/10 Javascript
React为 Vue 引入容器组件和展示组件的教程详解
2018/05/03 Javascript
vue el-table实现自定义表头
2019/12/11 Javascript
如何在vue中使用jointjs过程解析
2020/05/29 Javascript
vue项目,代码提交至码云,iconfont的用法说明
2020/07/30 Javascript
Python正则表达式实现截取成对括号的方法
2017/01/06 Python
100行Python代码实现自动抢火车票(附源码)
2018/01/11 Python
基于Python中numpy数组的合并实例讲解
2018/04/04 Python
python爬取足球直播吧五大联赛积分榜
2018/06/13 Python
浅谈Python批处理文件夹中的txt文件
2019/03/11 Python
使用python-pptx包批量修改ppt格式的实现
2020/02/14 Python
python中pathlib模块的基本用法与总结
2020/08/17 Python
python raise的基本使用
2020/09/10 Python
Python 实现进度条的六种方式
2021/01/06 Python
html5使用canvas压缩图片的示例代码
2018/09/11 HTML / CSS
小女主人连衣裙:Little Mistress
2017/07/10 全球购物
Diamondback自行车:拥有你的冒险
2019/04/22 全球购物
施华洛世奇新加坡官网:SWAROVSKI新加坡
2020/10/06 全球购物
西安众合通用.net笔试题
2013/03/18 面试题
系统管理员的职责包括那些?管理的对象是什么?
2016/09/20 面试题
nginx lua 操作 mysql
2022/05/15 Servers