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类
Jul 15 PHP
配置支持SSI
Nov 25 PHP
dedecms防止FCK乱格式化你的代码的修改方法
Mar 17 PHP
PHP中比较两个字符串找出第一个不同字符位置例子
Apr 08 PHP
PHP中的use关键字概述
Jul 23 PHP
关于WordPress的SEO优化相关的一些PHP页面脚本技巧
Dec 10 PHP
谈谈php对接芝麻信用踩的坑
Dec 01 PHP
简单解决微信文章图片防盗链问题
Dec 17 PHP
php+redis实现多台服务器内网存储session并读取示例
Jan 12 PHP
PHP实现大数(浮点数)取余的方法
Feb 18 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
Nov 21 PHP
PHP常用字符串函数用法实例总结
Jun 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
自动分页的不完整解决方案
2007/01/12 PHP
CI框架中集成CKEditor编辑器的教程
2014/06/09 PHP
CodeIgniter模板引擎使用实例
2014/07/15 PHP
PHP仿tp实现mvc框架基本设计思路与实现方法分析
2018/05/23 PHP
JavaScript replace(rgExp,fn)正则替换的用法
2010/03/04 Javascript
javascript时间函数基础介绍
2013/03/28 Javascript
js实现的常用的左侧导航效果
2013/10/17 Javascript
iframe的onreadystatechange事件在firefox下的使用
2014/04/16 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
2017/02/23 Javascript
vue 动态绑定背景图片的方法
2018/08/10 Javascript
基于JavaScript实现瀑布流布局
2018/08/15 Javascript
微信小程序使用map组件实现路线规划功能示例
2019/01/22 Javascript
Node.js Windows Binary二进制文件安装方法
2019/05/16 Javascript
javascript实现5秒倒计时并跳转功能
2019/06/20 Javascript
vue-cli3中配置alias和打包加hash值操作
2020/09/04 Javascript
vue中template的三种写法示例
2020/10/21 Javascript
python 解析XML python模块xml.dom解析xml实例代码
2014/02/07 Python
python实现将文本转换成语音的方法
2015/05/28 Python
python中如何使用正则表达式的非贪婪模式示例
2017/10/09 Python
Python数据分析库pandas基本操作方法
2018/04/08 Python
python 定义n个变量方法 (变量声明自动化)
2018/11/10 Python
Python 写入训练日志文件并控制台输出解析
2019/08/13 Python
调用其他python脚本文件里面的类和方法过程解析
2019/11/15 Python
python 实现端口扫描工具
2020/12/18 Python
调用HTML5的Canvas API绘制图形的快速入门指南
2016/06/17 HTML / CSS
移动HTML5前端框架—MUI的使用
2017/12/18 HTML / CSS
JPA的优势都有哪些
2013/07/04 面试题
会计自荐信范文
2014/03/09 职场文书
《祁黄羊》教学反思
2014/04/22 职场文书
工作总结与自我评价
2014/09/18 职场文书
2015年英语教研组工作总结
2015/05/23 职场文书
逃出克隆岛观后感
2015/06/09 职场文书
昆虫记读书笔记
2015/06/26 职场文书
生活委员竞选稿
2015/11/21 职场文书
幼儿园中班教学反思
2016/03/03 职场文书
2019年“红色之旅”心得体会1000字(3篇)
2019/09/27 职场文书