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 数字左侧自动补0
Mar 31 PHP
PHP令牌 Token改进版
Jul 18 PHP
php适配器模式介绍
Aug 14 PHP
推荐十款免费 WordPress 插件
Mar 24 PHP
PHP 开发者该知道的 5 个 Composer 小技巧
Feb 03 PHP
Yii框架上传图片用法总结
Mar 28 PHP
thinkphp 验证码 的使用小结
May 07 PHP
php使用curl伪造来源ip和refer的方法示例
May 08 PHP
PHP堆栈调试操作简单示例
Jun 15 PHP
PHP工厂模式的日常使用
Mar 20 PHP
php依赖注入知识点详解
Sep 23 PHP
laravel框架添加数据,显示数据,返回成功值的方法
Oct 11 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函数,php爱好者站推荐
2007/03/19 PHP
PHP通过正则表达式下载图片到本地的实现代码
2011/09/19 PHP
Laravel 5框架学习之子视图和表单复用
2015/04/09 PHP
解决微信授权回调页面域名只能设置一个的问题
2016/12/11 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
2018/03/12 PHP
用jquery ajax获取网站Alexa排名的代码
2009/12/12 Javascript
js 中 document.createEvent的用法
2010/08/29 Javascript
自定义的一个简单时尚js下拉选择框
2013/11/20 Javascript
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
2015/01/01 NodeJs
在微信、支付宝、百度钱包实现点击返回按钮关闭当前页面和窗口的方法
2016/08/05 Javascript
Angularjs 创建可复用组件实例代码
2016/10/09 Javascript
Bootstrap CSS组件之输入框组
2016/12/17 Javascript
Angular.js实现注册系统的实例详解
2016/12/18 Javascript
微信小程序实战之仿android fragment可滑动底部导航栏(4)
2020/04/16 Javascript
解决vue2.x中数据渲染以及vuex缓存的问题
2017/07/13 Javascript
在Swiper内如何制作CSS3动画效果示例代码
2017/12/07 Javascript
Vue的实例、生命周期与Vue脚手架(vue-cli)实例详解
2017/12/27 Javascript
Angular实现的进度条功能示例
2018/02/18 Javascript
node.js基础知识小结
2018/02/26 Javascript
JS实现可针对算术表达式求值的计算器功能示例
2018/09/04 Javascript
vue+element实现打印页面功能
2019/05/20 Javascript
SSM+layUI 根据登录信息显示不同的页面方法
2019/09/20 Javascript
[10:53]2018DOTA2国际邀请赛寻真——EG
2018/08/11 DOTA
python通过装饰器检查函数参数数据类型的方法
2015/03/13 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
2019/07/31 Python
Python爬取数据并实现可视化代码解析
2020/08/12 Python
jupyter notebook快速入门及使用详解
2020/11/13 Python
Python解析微信dat文件的方法
2020/11/30 Python
python+selenium爬取微博热搜存入Mysql的实现方法
2021/01/27 Python
幼儿园庆六一游园活动方案
2014/01/29 职场文书
健康教育评估方案
2014/05/25 职场文书
基层党组织整改方案
2014/10/25 职场文书
2019银行员工个人工作自我鉴定
2019/06/27 职场文书
曾国藩励志经典名言37句,蕴含哲理
2019/10/14 职场文书
Nginx配置80端口访问8080及项目名地址方法解析
2021/03/31 Servers