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做推送服务端实现ios消息推送
Jul 01 PHP
php实现aes加密类分享
Feb 16 PHP
基于递归实现的php树形菜单代码
Nov 19 PHP
php压缩和解压缩字符串的方法
Mar 14 PHP
PHP中filter函数校验数据的方法详解
Jul 31 PHP
YII Framework教程之异常处理详解
Mar 14 PHP
浅析php静态方法与非静态方法的用法区别
May 17 PHP
php实现图片上传时添加文字和图片水印技巧
Apr 18 PHP
mysql desc(DESCRIBE)命令实例讲解
Sep 24 PHP
PHP实现批量清空删除指定文件夹所有内容的方法
May 30 PHP
浅谈thinkphp5 instance 的简单实现
Jul 30 PHP
Thinkphp5框架实现获取数据库数据到视图的方法
Aug 14 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
linux下为php添加curl扩展的方法
2011/07/29 PHP
php代码中使用换行及(\n或\r\n和br)的应用
2013/02/02 PHP
PHP实现Google plus的好友拖拽分组效果
2016/10/21 PHP
PHP实现微信小程序人脸识别刷脸登录功能
2018/05/24 PHP
Laravel框架定时任务2种实现方式示例
2018/12/08 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
2019/05/23 PHP
JavaScript 嵌套函数指向this对象错误的解决方法
2010/03/15 Javascript
jQuery powerFloat万能浮动层下拉层插件使用介绍
2010/12/27 Javascript
js操作textarea方法集合封装(兼容IE,firefox)
2011/02/22 Javascript
Javascript Object 对象学习笔记
2014/12/17 Javascript
JS实现文字向下滚动完整实例
2015/02/06 Javascript
JS+CSS实现自动改变切换方向图片幻灯切换效果的方法
2015/03/02 Javascript
JS递归遍历对象获得Value值方法技巧
2016/06/14 Javascript
jQuery实现背景滑动菜单
2016/12/02 Javascript
JS返回页面时自动回滚到历史浏览位置
2018/09/26 Javascript
vue安装和使用scss及sass与scss的区别详解
2018/10/15 Javascript
[06:45]DOTA2-DPC中国联赛 正赛 Magma vs LBZS 选手采访
2021/03/11 DOTA
python发腾讯微博代码分享
2014/01/10 Python
Python实现七彩蟒蛇绘制实例代码
2018/01/16 Python
python得到qq句柄,并显示在前台的方法
2018/10/14 Python
python itchat给指定联系人发消息的方法
2019/06/11 Python
基于Python函数和变量名解析
2019/07/19 Python
Python实现钉钉订阅消息功能
2020/01/14 Python
Python smtp邮件发送模块用法教程
2020/06/15 Python
python PIL模块的基本使用
2020/09/29 Python
越南电子产品购物网站:FPT Shop
2017/12/02 全球购物
渗透攻击的测试步骤
2014/06/07 面试题
大学毕业生简单自荐信
2013/11/05 职场文书
职专应届生求职信
2013/11/16 职场文书
高职教师岗位职责
2013/12/24 职场文书
物业公司采购员岗位职责
2013/12/31 职场文书
小学数学课题方案
2014/06/15 职场文书
信息与工商管理职业规划范文:为梦想而搏击
2014/09/11 职场文书
行政处罚告知书
2015/07/01 职场文书
python中的3种定义类方法
2021/11/27 Python
你知道Java Spring的两种事务吗
2022/03/16 Java/Android