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 INI配置文件的解析实现分析
Jan 04 PHP
php入门学习知识点五 关于php数组的几个基本操作
Jul 14 PHP
php读取mysql乱码,用set names XXX解决的原理分享
Dec 29 PHP
php读取文件内容的几种方法详解
Jun 26 PHP
PHP的Yii框架的常用日志操作总结
Dec 08 PHP
Yii框架中sphinx索引配置方法解析
Oct 18 PHP
php 实现一个字符串加密解密的函数实例代码
Nov 01 PHP
PHP数组去重的更快实现方式分析
May 09 PHP
phpstorm 配置xdebug的示例代码
Mar 31 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
Jul 19 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对象克隆clone用法示例
2016/09/28 PHP
php+ajax简单实现全选删除的方法
2016/12/06 PHP
php+mysql+ajax实现单表多字段多关键词查询的方法
2017/04/15 PHP
php微信开发之关注事件
2018/06/14 PHP
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
ie7+背景透明文字不透明超级简单的实现方法
2014/01/17 Javascript
js与jquery回车提交的方法
2015/02/03 Javascript
jquery操作ID带有变量的节点实例
2016/12/07 Javascript
addeventlistener监听scroll跟touch(实例讲解)
2017/08/04 Javascript
基于vue和react的spa进行按需加载的实现方法
2018/09/29 Javascript
Vue实现table上下移动功能示例
2019/02/21 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
2019/04/11 Javascript
vue两组件间值传递 $router.push实现方法
2019/05/15 Javascript
react实现antd线上主题动态切换功能
2019/08/12 Javascript
VUE解决 v-html不能触发点击事件的问题
2019/10/28 Javascript
js实现上传图片并显示图片名称
2019/12/18 Javascript
electron 如何将任意资源打包的方法步骤
2020/04/16 Javascript
html-webpack-plugin修改页面的title的方法
2020/06/18 Javascript
vue+iview分页组件的封装
2020/11/17 Vue.js
[04:36]DOTA2国际邀请赛 ti3精彩集锦
2013/08/19 DOTA
Pthon批量处理将pdb文件生成dssp文件
2015/06/21 Python
python3.5使用tkinter制作记事本
2016/06/20 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
2018/10/14 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
2019/01/17 Python
DRF跨域后端解决之django-cors-headers的使用
2019/01/27 Python
python 引用传递和值传递详解(实参,形参)
2020/06/05 Python
python实现数学模型(插值、拟合和微分方程)
2020/11/13 Python
浅析python连接数据库的重要事项
2021/02/22 Python
数控个人求职信范文
2014/02/03 职场文书
2014社区三八妇女节活动方案
2014/03/30 职场文书
投资意向书范本
2014/04/01 职场文书
低碳环保倡议书
2014/04/14 职场文书
揭牌仪式策划方案
2014/05/28 职场文书
物理教育专业求职信
2014/06/25 职场文书
焦点访谈观后感
2015/06/11 职场文书
vue+elementUI实现表格列的显示与隐藏
2022/04/13 Vue.js