PHP的PDO错误与错误处理


Posted in PHP onJanuary 27, 2019

PHP PDO 错误与错误处理

  • PDO::ERRMODE_SILENT

此为默认模式。 PDO 将只简单地设置错误码,可使用PDO::errorCode()PDO::errorInfo()方法来检查语句和数据库对象。如果错误是由于对语句对象的调用而产生的,那么可以调用那个对象的PDOStatement::errorCode()PDOStatement::errorInfo()方法。如果错误是由于调用数据库对象而产生的,那么可以在数据库对象上调用上述两个方法。

  • PDO::ERRMODE_WARNING

除设置错误码之外,PDO还将发出一条传统的E_WARNING信息。如果只是想看看发生了什么问题且不中断应用程序的流程,那么此设置在调试/测试期间非常有用。

  • PDO::ERRMODE_EXCEPTION

除设置错误码之外,PDO还将抛出一个PDOException异常类并设置它的属性来反射错误码和错误信息。此设置在调试期间也非常有用,因为它会有效地放大脚本中产生错误的点,从而可以非常快速地指出代码中有问题的潜在区域(记住:如果异常导致脚本终止,则事务被自动回滚)。

异常模式另一个非常有用的是,相比传统 PHP风格的警告,可以更清晰地构建自己的错误处理,而且比起静默模式和显式地检查每种数据库调用的返回值,异常模式需要的代码/嵌套更少。

创建 PDO 实例并设置错误模式

<?php
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
  $dbh = new PDO($dsn, $user, $password);
  $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
  echo 'Connection failed: ' . $e->getMessage();
}
?>

注意:不管当前是否设置了PDO::ATTR_ERRMODE ,如果连接失败,PDO::__construct()将总是抛出一个 PDOException 异常。未捕获异常是致命的。

创建 PDO 实例并在构造函数中设置错误模式

<?php
$dsn = 'mysql:dbname=test;host=127.0.0.1';
$user = 'googleguy';
$password = 'googleguy';
/*
  使用 try/catch 围绕构造函数仍然有效,即使设置了 ERRMODE 为 WARNING,
  因为如果连接失败,PDO::__construct 将总是抛出一个 PDOException 异常。
*/
try {
  $dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
} catch (PDOException $e) {
  echo 'Connection failed: ' . $e->getMessage();
  exit;
}
// 这里将导致 PDO 抛出一个 E_WARNING 级别的错误,而不是 一个异常 (当数据表不存在时)
$dbh->query("SELECT wrongcolumn FROM wrongtable");
?>

以上例程会输出:

Warning: PDO::query(): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.wrongtable' doesn't exist in
/tmp/pdo_test.php on line 18
add a note add a note

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

PHP 相关文章推荐
PHP初学者头疼问题总结
Oct 09 PHP
新闻分类录入、显示系统
Oct 09 PHP
使PHP自定义函数返回多个值
Nov 26 PHP
PHP第一季视频教程(李炎恢+php100 不断更新)
May 29 PHP
PHP文件注释标记及规范小结
Apr 01 PHP
Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
Jul 23 PHP
php加密解密函数authcode的用法详细解析
Oct 28 PHP
PHP中使用虚代理实现延迟加载技术
Nov 05 PHP
PHP获取当前日期和时间及格式化方法参数
May 11 PHP
PHP中for循环与foreach的区别
Mar 06 PHP
PHP编程获取各个时间段具体时间的方法
May 26 PHP
PHP sdk实现在线打包代码示例
Dec 09 PHP
实例分析PHP将字符串转换成数字的方法
Jan 27 #PHP
PHP的PDO预处理语句与存储过程
Jan 27 #PHP
PHP中数组转换为SimpleXML教程
Jan 27 #PHP
实例讲解php实现多线程
Jan 27 #PHP
php中访问修饰符的知识点总结
Jan 27 #PHP
实例讲解php将字符串输出到HTML
Jan 27 #PHP
PHP常见加密函数用法示例【crypt与md5】
Jan 27 #PHP
You might like
短波收音机简介
2021/03/01 无线电
PHP写日志的实现方法
2014/11/05 PHP
php中关于socket的系列函数总结
2015/05/18 PHP
Laravel5权限管理方法详解
2016/07/26 PHP
浅谈PHP定义命令空间的几个注意点(推荐)
2016/10/29 PHP
thinkphp5修改view到根目录实例方法
2019/07/02 PHP
PHP笛卡尔积实现原理及代码实例
2020/12/09 PHP
extjs 学习笔记 四 带分页的grid
2009/10/20 Javascript
Iframe 自适应高度并实时监控高度变化的js代码
2009/10/30 Javascript
Jquery的hide及toggle方法让超链接慢慢消失
2013/09/06 Javascript
js实现飞入星星特效代码
2014/10/17 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
2014/11/08 Javascript
JavaScript动态修改弹出窗口大小的方法
2015/04/06 Javascript
js实现简单的省市县三级联动效果实例
2016/02/18 Javascript
JS打开摄像头并截图上传示例
2017/02/18 Javascript
JS中IP地址与整数相互转换的实现代码
2017/04/10 Javascript
vue实现新闻展示页的步骤详解
2019/04/11 Javascript
vue组件化中slot的基本使用方法
2019/05/01 Javascript
Node.js创建一个Express服务的方法详解
2020/01/06 Javascript
[09:43]DOTA2每周TOP10 精彩击杀集锦vol.5
2014/06/25 DOTA
[07:20]2018DOTA2国际邀请赛寻真——逐梦Mineski
2018/08/10 DOTA
python 将字符串转换成字典dict
2013/03/24 Python
Python操作excel的方法总结(xlrd、xlwt、openpyxl)
2019/09/02 Python
python3 使用Opencv打开USB摄像头,配置1080P分辨率的操作
2019/12/11 Python
关于初始种子自动选取的区域生长实例(python+opencv)
2020/01/16 Python
python numpy实现rolling滚动案例
2020/06/08 Python
CSS3 RGBA色彩模式使用实例讲解
2016/04/26 HTML / CSS
UNIX操作系统结构由哪几部分组成
2016/02/17 面试题
清洁工岗位职责
2014/01/29 职场文书
护理不良事件检讨书
2014/02/06 职场文书
宣传部部长竞选演讲稿
2014/04/26 职场文书
法制宣传标语
2014/06/23 职场文书
2015年社区统计工作总结
2015/04/21 职场文书
停课通知书
2015/04/24 职场文书
情况说明书格式及范文
2019/06/24 职场文书
Python排序算法之插入排序及其优化方案详解
2021/06/11 Python