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 session处理的定制
Mar 16 PHP
PHP重定向的3种方式
Mar 07 PHP
用PHP实现浏览器点击下载TXT文档的方法详解
Jun 02 PHP
PHP CURL获取cookies模拟登录的方法
Nov 04 PHP
php中JSON的使用方法
Apr 30 PHP
WordPress开发中用于获取近期文章的PHP函数使用解析
Jan 05 PHP
CI映射(加载)数据到view层的方法
Mar 28 PHP
PHP 表单提交及处理表单数据详解及实例
Dec 27 PHP
PHP 7.1中AES加解密方法mcrypt_module_open()的替换方案
Oct 17 PHP
PHP迭代器和迭代的实现与使用方法分析
Apr 19 PHP
PHP获取本周所有日期或者最近七天所有日期的方法
Jun 20 PHP
php求斐波那契数的两种实现方式【递归与递推】
Sep 09 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的webservice的wsdl的XML无法显示问题的解决方法
2014/03/11 PHP
phpstorm编辑器乱码问题解决
2014/12/01 PHP
php返回相对时间(如:20分钟前,3天前)的方法
2015/04/14 PHP
详解PHP实现异步调用的4种方法
2016/03/14 PHP
PHP实现基于状态的责任链审批模式详解
2019/05/31 PHP
Prototype1.6 JS 官方下载地址
2007/11/30 Javascript
jquery 简单的进度条实现代码
2010/03/11 Javascript
用JS实现一个TreeMenu效果分享
2011/08/28 Javascript
jQuery 菜单随滚条改为以定位方式(固定要浏览器顶部)
2012/05/24 Javascript
window.requestAnimationFrame是什么意思,怎么用
2013/01/13 Javascript
浅析javascript的间隔调用和延时调用
2014/11/12 Javascript
JS清除选择内容的方法
2015/01/29 Javascript
js实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)
2016/03/09 Javascript
javascript运算符语法全面概述
2016/07/14 Javascript
解析JavaScript实现DDoS攻击原理与保护措施
2016/12/26 Javascript
BootStrap中jQuery插件Carousel实现轮播广告效果
2017/03/27 jQuery
mongoose中利用populate处理嵌套的方法
2017/05/26 Javascript
理解Angular的providers给Http添加默认headers
2017/07/04 Javascript
浅析JS中常用类型转换及运算符表达式
2017/07/23 Javascript
原生JavaScript实现todolist功能
2018/03/02 Javascript
vue-router路由懒加载的实现(解决vue项目首次加载慢)
2018/08/28 Javascript
nodejs通过钉钉群机器人推送消息的实现代码
2019/05/05 NodeJs
JS实现简易图片自动轮播
2020/10/16 Javascript
[01:17]Ti4 循环赛第一日回顾
2014/07/11 DOTA
Python中多线程的创建及基本调用方法
2016/07/08 Python
python中利用zfill方法自动给数字前面补0
2018/04/10 Python
python自动截取需要区域,进行图像识别的方法
2018/05/17 Python
css3和jquery实现的可折叠导航菜单适合放在手机网页的导航菜单
2014/09/02 HTML / CSS
德国街头和运动文化高品质商店:BSTN Store
2017/08/26 全球购物
NULL是什么,它是怎么定义的
2015/05/09 面试题
本科生学习总结的自我评价
2013/10/02 职场文书
《少年王冕》教学反思
2014/04/11 职场文书
工商管理专业毕业生求职信
2014/05/26 职场文书
力学专业求职信
2014/07/23 职场文书
银行给客户的感谢信
2015/01/23 职场文书
读《茶花女》有感:山茶花的盛开与凋零
2020/01/17 职场文书