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 相关文章推荐
WordPress判断用户是否登录的代码
Mar 17 PHP
PHP无限分类代码,支持数组格式化、直接输出菜单两种方式
May 18 PHP
深入解析PHP中逗号与点号的区别
Aug 05 PHP
php结合ajax实现赞、顶、踩功能实例
May 12 PHP
php中Socket创建与监听实现方法
Jan 05 PHP
php实现Mysql简易操作类
Oct 11 PHP
php中使用GD库做验证码
Mar 31 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
Jun 13 PHP
thinkPHP5.0框架模块设计详解
Mar 18 PHP
laravel 5.3中自定义加密服务的方案详解
May 09 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
Mar 25 PHP
php use和include区别总结
Oct 13 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中用socket模拟http中post或者get提交数据的示例代码
2013/08/08 PHP
新浪SAE搭建PHP项目教程
2015/01/28 PHP
常用的php图片处理类(水印、等比缩放、固定高宽)分享
2015/06/19 PHP
用PHP代码在网页上生成图片
2015/07/01 PHP
php探针使用原理和技巧讲解
2019/09/17 PHP
jquery事件机制扩展插件 jquery鼠标右键事件
2011/12/21 Javascript
JavaScript解析URL参数示例代码
2013/08/12 Javascript
用javascript删除当前行,添加行(示例代码)
2013/11/25 Javascript
jquery数组之存放checkbox全选值示例代码
2013/12/20 Javascript
javascript操作select元素实例分析
2015/03/27 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
2016/02/29 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单
2016/11/25 Javascript
浅谈jQuery this和$(this)的区别及获取$(this)子元素对象的方法
2016/11/29 Javascript
JS实现监控微信小程序的原理
2018/06/15 Javascript
vue实现下拉加载其实没那么复杂
2019/08/13 Javascript
15分钟学会vue项目改造成SSR(小白教程)
2019/12/17 Javascript
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS OG
2018/03/30 DOTA
ssh批量登录并执行命令的python实现代码
2012/05/25 Python
一波神奇的Python语句、函数与方法的使用技巧总结
2015/12/08 Python
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
2017/08/08 Python
Python语言实现百度语音识别API的使用实例
2017/12/13 Python
用xpath获取指定标签下的所有text的实例
2019/01/02 Python
奥地利票务门户网站:oeticket.com
2019/12/31 全球购物
工作中个人的自我评价
2013/12/31 职场文书
《悯农》教学反思
2014/04/28 职场文书
计划生育证明格式范本
2014/09/12 职场文书
党员批评与自我批评
2014/10/15 职场文书
公司离职证明范本
2014/10/17 职场文书
2014年政教处工作总结
2014/12/20 职场文书
乡镇干部学习心得体会
2016/01/23 职场文书
2019学生会干事辞职信
2019/06/27 职场文书
送给火锅店的创意营销方案!
2019/07/08 职场文书
python通过opencv调用摄像头操作实例分析
2021/06/07 Python
Pandas-DataFrame知识点汇总
2022/03/16 Python
游戏《我的世界》澄清Xbox版暂无计划加入光追
2022/04/03 其他游戏
mysql序号rownum行号实现方式
2022/12/24 MySQL