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 相关文章推荐
PHP5.3.1 不再支持ISAPI
Jan 08 PHP
PHP获取用户的浏览器与操作系统信息的代码
Sep 04 PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
Jan 11 PHP
php无限分类且支持输出树状图的详细介绍
Jun 19 PHP
php生成zip文件类实例
Apr 07 PHP
PHP输出一个等腰三角形的方法
May 12 PHP
详解PHP实现执行定时任务
Dec 21 PHP
CI(Codeigniter)的Setting增强配置类实例
Jan 06 PHP
PHP格式化MYSQL返回float类型的方法
Mar 30 PHP
php unlink()函数使用教程
Jul 12 PHP
php intval函数用法总结
Apr 14 PHP
php libevent 功能与使用方法详解
Mar 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
PHP4和PHP5共存于一系统
2006/11/17 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
2016/02/15 PHP
基于PHP实现用户注册登录功能
2016/10/14 PHP
在Javascript中定义对象类别
2006/12/22 Javascript
jQuery 行级解析读取XML文件(附源码)
2009/10/12 Javascript
javascript 判断数组是否已包含了某个元素的函数
2010/05/30 Javascript
JQuery中getJSON的使用方法
2010/12/13 Javascript
javascript中expression的用法整理
2014/05/13 Javascript
JSON格式化输出
2014/11/10 Javascript
jQuery实现防止提交按钮被双击的方法
2015/03/24 Javascript
jQuery 常见小例汇总
2016/12/14 Javascript
jQuery动态生成表格及右键菜单功能示例
2017/01/13 Javascript
Vue监听数组变化源码解析
2017/03/09 Javascript
Babel 入门教程学习笔记
2018/06/13 Javascript
JSON生成Form表单的方法示例
2018/11/21 Javascript
element-ui中按需引入的实现
2019/12/25 Javascript
js常用方法、检查是否有特殊字符串、倒序截取字符串操作完整示例
2020/01/26 Javascript
[02:29]大剑、皮鞭、女装,这届DOTA2勇士令状里都有
2020/07/17 DOTA
Python中使用gzip模块压缩文件的简单教程
2015/04/08 Python
在Python中使用itertools模块中的组合函数的教程
2015/04/13 Python
python类的方法属性与方法属性的动态绑定代码详解
2017/12/27 Python
Python实现修改文件内容的方法分析
2018/03/25 Python
python生成1行四列全2矩阵的方法
2018/08/04 Python
Python list列表中删除多个重复元素操作示例
2019/02/27 Python
Django中提示消息messages的设置方式
2019/11/15 Python
python 将dicom图片转换成jpg图片的实例
2020/01/13 Python
Tensorflow 多线程设置方式
2020/02/06 Python
python 中不同包 类 方法 之间的调用详解
2020/03/09 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
2020/07/09 Python
详解python的xlwings库读写excel操作总结
2021/02/26 Python
PHP数据运算类型都有哪些
2013/11/05 面试题
应届毕业生应聘自荐信范文
2014/02/26 职场文书
2014年银行员工年终自我评价
2014/09/19 职场文书
PHP使用非对称加密算法RSA
2021/04/21 PHP
80行代码写一个Webpack插件并发布到npm
2021/05/24 Javascript
pandas时间序列之pd.to_datetime()的实现
2022/06/16 Python