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+SqlServer实现分页显示
Oct 09 PHP
用文本文件制作留言板提示(上)
Oct 09 PHP
非常精妙的PHP递归调用与静态变量使用
Dec 16 PHP
php生成短网址示例
May 05 PHP
php实现简单文件下载的方法
Jan 30 PHP
使用php实现从身份证中提取生日
May 09 PHP
PHP 无限级分类
May 04 PHP
详解Yaf框架PHPUnit集成测试方法
Dec 27 PHP
PHP实现git部署的方法教程
Dec 19 PHP
Docker搭建自己的PHP开发环境
Feb 24 PHP
Django 标签筛选的实现代码(一对多、多对多)
Sep 05 PHP
基于php+MySql实现学生信息管理系统实例
Aug 04 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
PHP仿博客园 个人博客(2) 数据库增添改删
2013/07/05 PHP
php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
2014/11/11 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
2016/03/22 PHP
深入解析PHP的Yii框架中的缓存功能
2016/03/29 PHP
PHP判断一个数组是另一个数组子集的方法详解
2017/07/31 PHP
laravel 修改.htaccess文件 重定向public的解决方法
2019/10/12 PHP
用JS剩余字数计算的代码
2008/07/03 Javascript
一个简单的JavaScript 日期计算算法
2009/09/11 Javascript
node.js中的fs.fsync方法使用说明
2014/12/15 Javascript
BootStrap中关于Select下拉框选择触发事件及扩展
2016/11/22 Javascript
Angular的自定义指令以及实例
2016/12/26 Javascript
函数四种调用模式以及其中的this指向
2017/01/16 Javascript
jQuery制作图片旋转效果
2017/02/02 Javascript
解决低版本的浏览器不支持es6的import问题
2018/03/09 Javascript
微信小程序实现Swiper轮播图效果
2019/11/22 Javascript
Pythont特殊语法filter,map,reduce,apply使用方法
2016/02/27 Python
python和shell监控linux服务器的详细代码
2018/06/22 Python
python判断文件是否存在,不存在就创建一个的实例
2019/02/18 Python
Python Matplotlib实现三维数据的散点图绘制
2019/03/19 Python
python多线程抽象编程模型详解
2019/03/20 Python
不到20行代码用Python做一个智能聊天机器人
2019/04/19 Python
django框架模板中定义变量(set variable in django template)的方法分析
2019/06/24 Python
对Python获取屏幕截图的4种方法详解
2019/08/27 Python
python实现大学人员管理系统
2019/10/25 Python
使用jquery实现HTML5响应式导航菜单教程
2014/04/02 HTML / CSS
HTML5离线应用与客户端存储的实现
2018/05/03 HTML / CSS
PAUL HEWITT手表美国站:德国北部时尚生活配饰品牌,船锚元素
2017/11/18 全球购物
意大利高端时尚买手店:Stefania Mode
2018/03/01 全球购物
SQL SERVER面试资料
2013/03/30 面试题
一年级班主任感言
2014/03/08 职场文书
领导班子四风表现材料
2014/08/23 职场文书
关于清明节的演讲稿2015
2015/03/18 职场文书
2015年体育教学工作总结
2015/05/20 职场文书
毕业实习单位意见
2015/06/04 职场文书
党课主持词大全
2015/06/30 职场文书
解决redis批量删除key值的问题
2022/03/23 Redis