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&amp;mysql(四)
Oct 09 PHP
ionCube 一款类似zend的PHP加密/解密工具
Jul 25 PHP
php中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
May 04 PHP
php获取远程图片体积大小的实例
Nov 12 PHP
php制作unicode解码工具(unicode编码转换器)代码分享
Dec 24 PHP
深入理解PHP类的自动载入机制
Sep 16 PHP
PHP二分查找算法示例【递归与非递归方法】
Sep 29 PHP
PHP中静态变量的使用方法实例分析
Dec 01 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
Dec 24 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
Mar 31 PHP
PHP中散列密码的安全性分析
Jul 26 PHP
Laravel Eloquent ORM 多条件查询的例子
Oct 10 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函数指定默认值方法的小例子
2013/12/04 PHP
php基于base64解码图片与加密图片还原实例
2014/11/03 PHP
CL vs ForZe BO5 第二场 2.13
2021/03/10 DOTA
用window.location.href实现刷新另个框架页面
2007/03/07 Javascript
使用JSLint提高JS代码质量方法分享
2013/12/16 Javascript
滚动条响应鼠标滑轮事件实现上下滚动的js代码
2014/06/30 Javascript
高性能JavaScript 重排与重绘(2)
2015/08/11 Javascript
BootStrap Validator 版本差异问题导致的submitHandler失效问题的解决方法
2016/12/01 Javascript
基于JS实现二维码图片固定在右下角某处并跟随滚动条滚动
2017/02/08 Javascript
Vue cli+mui 区域滚动的实例代码
2018/01/25 Javascript
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
vue单页缓存方案分析及实现
2018/09/25 Javascript
深入了解响应式React Native Echarts组件
2019/05/29 Javascript
Vue的生命周期操作示例
2019/09/17 Javascript
openlayers4.6.5实现距离量测和面积量测
2020/09/25 Javascript
[01:00:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第三场 1月10日
2021/03/11 DOTA
python统计字符串中指定字符出现次数的方法
2015/04/04 Python
Python实现备份MySQL数据库的方法示例
2018/01/11 Python
python 生成图形验证码的方法示例
2018/11/11 Python
python实现彩色图转换成灰度图
2019/01/15 Python
python批量识别图片指定区域文字内容
2019/04/30 Python
django数据库自动重连的方法实例
2019/07/21 Python
Python在cmd上打印彩色文字实现过程详解
2019/08/07 Python
使用pytorch和torchtext进行文本分类的实例
2020/01/08 Python
Python随机数函数代码实例解析
2020/02/09 Python
使用jupyter notebook将文件保存为Markdown,HTML等文件格式
2020/04/14 Python
python中sort sorted reverse reversed函数的区别说明
2020/05/11 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
2020/12/03 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
2021/01/07 Python
Python 调用C++封装的进一步探索交流
2021/03/04 Python
捐书寄语赠言
2014/01/18 职场文书
我爱读书演讲稿
2014/05/07 职场文书
校园标语大全
2014/06/19 职场文书
2015年社区综治工作总结
2015/04/21 职场文书
同学会演讲稿
2019/04/02 职场文书
JS前端使用canvas实现扩展物体类和事件派发
2022/08/05 Javascript