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会员权限控制实现原理分析
May 29 PHP
显示程序执行时间php函数代码
Aug 29 PHP
PHP命名空间(Namespace)简明教程
Jun 11 PHP
Yii框架获取当前controlle和action对应id的方法
Dec 03 PHP
PHP、Java des加密解密实例
Apr 27 PHP
php将金额数字转化为中文大写
Jul 09 PHP
Session 失效的原因汇总及解决丢失办法
Sep 30 PHP
PHP输出XML格式数据的方法总结
Feb 08 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
Jul 20 PHP
php操作mongodb封装类与用法实例
Sep 01 PHP
PHP chr()函数讲解
Feb 11 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
Dec 12 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+mysql)
2007/11/23 PHP
PHP 循环列出目录内容的函数代码
2010/05/26 PHP
Cygwin中安装PHP方法步骤
2015/07/04 PHP
浅析PHP7的多进程及实例源码
2019/04/14 PHP
extjs tabpanel限制选项卡数量实现思路及代码
2013/04/02 Javascript
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
SinaEditor使用方法详解
2013/12/28 Javascript
javascript模拟post提交隐藏地址栏的参数
2014/09/03 Javascript
一个JavaScript获取元素当前高度的实例
2014/10/29 Javascript
JavaScript判断是否为数组的3种方法及效率比较
2015/04/01 Javascript
深入理解JavaScript的React框架的原理
2015/07/02 Javascript
jquery可定制的在线UEditor编辑器
2015/11/17 Javascript
JavaScript比较当前时间是否在指定时间段内的方法
2016/08/02 Javascript
关于Vue.js 2.0的Vuex 2.0 你需要更新的知识库
2016/11/30 Javascript
RequireJs的使用详解
2017/02/19 Javascript
webpack中CommonsChunkPlugin详细教程(小结)
2017/11/09 Javascript
[01:15:16]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第一场 1月26日
2021/03/11 DOTA
python通过scapy获取局域网所有主机mac地址示例
2014/05/04 Python
Python随手笔记之标准类型内建函数
2015/12/02 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
2017/07/06 Python
Python代码块批量添加Tab缩进的方法
2018/06/25 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
2019/08/08 Python
基于Python获取照片的GPS位置信息
2020/01/20 Python
手把手教你进行Python虚拟环境配置教程
2020/02/03 Python
Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境
2020/04/08 Python
解决阿里云邮件发送不能使用25端口问题
2020/08/07 Python
pyqt5 textEdit、lineEdit操作的示例代码
2020/08/12 Python
python实现图像随机裁剪的示例代码
2020/12/10 Python
用CSS3的box-reflect来制作倒影效果
2016/11/15 HTML / CSS
如何查找网页漏洞
2016/06/22 面试题
大学生职业生涯规划范文
2014/01/22 职场文书
优秀通讯员事迹材料
2014/01/28 职场文书
《桂林山水》教学反思
2014/02/08 职场文书
2015年党员创先争优承诺书
2015/01/22 职场文书
高考学习决心书
2015/02/04 职场文书
APP界面设计技巧和注意事项
2022/04/29 杂记