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中使用数组实现堆栈数据结构的代码
Feb 05 PHP
php中curl使用指南
Feb 05 PHP
Laravel 5框架学习之用户认证
Apr 09 PHP
Smarty模板引擎缓存机制详解
May 23 PHP
Yii2中如何使用modal弹窗(基本使用)
May 30 PHP
Yii2实现上下联动下拉框功能的方法
Aug 10 PHP
php中namespace及use用法分析
Dec 06 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
Mar 31 PHP
Yii2 中实现单点登录的方法
Mar 09 PHP
Yii框架自定义数据库操作组件示例
Nov 11 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
Mar 26 PHP
实例讲解PHP表单
Jun 10 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
Windows下的PHP5.0安装配制详解
2006/09/05 PHP
PHP+MYSQL的文章管理系统(一)
2006/10/09 PHP
初学PHP的朋友 经常问的一些问题。不断更新
2011/08/11 PHP
Session服务器配置指南与使用经验的深入解析
2013/06/17 PHP
PHP实现远程下载文件到本地
2015/05/17 PHP
Yii实现Command任务处理的方法详解
2016/07/14 PHP
Javascript 不能释放内存.
2006/09/07 Javascript
JSON+JavaScript处理JSON的简单例子
2013/03/20 Javascript
javascript中直接写php代码的方法
2013/07/31 Javascript
jQuery中width()方法用法实例
2014/12/24 Javascript
浏览器中url存储的JavaScript实现
2015/07/07 Javascript
js实现带有介绍的Select列表菜单实例
2015/08/18 Javascript
JS更改select内option属性的方法
2015/10/14 Javascript
Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析
2016/01/18 Javascript
AngularJS中的指令全面解析(必看)
2016/05/20 Javascript
Bootstrap精简教程中秋大放送
2016/09/15 Javascript
HTML Table 空白单元格补全的简单实现
2016/10/13 Javascript
Nodejs 获取时间加手机标识的32位标识实现代码
2017/03/07 NodeJs
Vue2.0使用过程常见的一些问题总结学习
2017/04/10 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
2017/04/20 Javascript
jquery实现图片放大点击切换
2017/06/06 jQuery
jQuery制作input提示内容(兼容IE8以上)
2017/07/05 jQuery
vue项目中使用tinymce编辑器的步骤详解
2018/09/11 Javascript
jQuery实现简单全选框
2020/09/13 jQuery
python中的sort方法使用详解
2014/07/25 Python
详细介绍Ruby中的正则表达式
2015/04/10 Python
python监测当前联网状态并连接的实例
2018/12/18 Python
python输入多行字符串的方法总结
2019/07/02 Python
wxpython绘制圆角窗体
2019/11/18 Python
使用HTML5做个画图板的方法介绍
2013/05/03 HTML / CSS
意大利制造的西装、衬衫和针对男士量身定制的服装:Lanieri
2018/04/08 全球购物
物流专业自荐信
2014/05/23 职场文书
2014年药品销售工作总结
2014/12/16 职场文书
春节慰问简报
2015/07/21 职场文书
校园安全学习心得体会
2016/01/18 职场文书
MySql 缓存查询原理与缓存监控和索引监控介绍
2021/07/02 MySQL