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 相关文章推荐
一个用mysql_odbc和php写的serach数据库程序
Oct 09 PHP
PHP语法速查表
Dec 06 PHP
PHP 字符串操作入门教程
Dec 06 PHP
PHP应用JSON技巧讲解
Feb 03 PHP
PHP中cookie和session的区别实例分析
Aug 28 PHP
新浪微博OAuth认证和储存的主要过程详解
Mar 27 PHP
php生成毫秒时间戳的实例讲解
Sep 22 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
Dec 21 PHP
thinkphp3.2.0 setInc方法 源码全面解析
Jan 29 PHP
php微信开发之关键词回复功能
Jun 13 PHP
php学习笔记之字符串常见操作总结
Jul 16 PHP
PHP基于timestamp和nonce实现的防止重放攻击方案分析
Jul 26 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封装XML和JSON格式数据接口操作示例
2019/03/06 PHP
关于文本限制字数的js代码
2007/04/02 Javascript
Javascript中的数学函数集合
2007/05/08 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
2015/09/10 Javascript
jQuery+JSON实现AJAX二级联动实例分析
2015/12/18 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
2015/12/19 Javascript
js实现select选择框效果及美化
2016/08/19 Javascript
javascript容错处理代码(屏蔽js错误)
2017/01/20 Javascript
浅谈JavaScript中的apply/call/bind和this的使用
2017/02/26 Javascript
微信小程序 ecshop地址三级联动实现实例代码
2017/02/28 Javascript
ionic2屏幕适配实现适配手机、平板等设备的示例代码
2017/08/11 Javascript
JavaScript实现图片拖曳效果
2017/09/08 Javascript
详解webpack与SPA实践之开发环境搭建
2017/12/18 Javascript
js使用formData实现批量上传
2020/03/27 Javascript
微信小程序实现禁止分享代码实例
2019/10/19 Javascript
vue ajax 拦截原理与实现方法示例
2019/11/29 Javascript
Node.js API详解之 V8模块用法实例分析
2020/06/05 Javascript
[02:42]决战东方!DOTA2亚洲邀请赛重启荣耀之争
2017/03/17 DOTA
python操作MongoDB基础知识
2013/11/01 Python
Python中处理时间的几种方法小结
2015/04/09 Python
python tensorflow基于cnn实现手写数字识别
2018/01/01 Python
Python实现转换图片背景颜色代码
2020/04/30 Python
django admin 根据choice字段选择的不同来显示不同的页面方式
2020/05/13 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
2020/11/02 Python
10分钟理解CSS3 FlexBox弹性布局
2018/12/20 HTML / CSS
大学生就业推荐信范文
2013/11/29 职场文书
大学生自荐书范文
2013/12/10 职场文书
《美丽的小路》教学反思
2014/02/26 职场文书
求职自荐信怎么写
2014/03/06 职场文书
制药工程专业职业生涯规划范文
2014/03/10 职场文书
建设单位项目负责人任命书
2014/06/06 职场文书
药品营销专业毕业生自荐信
2014/07/02 职场文书
代理人委托书
2014/09/16 职场文书
荒岛余生观后感
2015/06/09 职场文书
安全生产标语口号
2015/12/26 职场文书
vue如何批量引入组件、注册和使用详解
2021/05/12 Vue.js