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下intval()和(int)转换使用与区别
Jul 18 PHP
PHP面向对象学习笔记之一 基础概念
Oct 06 PHP
PHP中如何调用webservice的实例参考
Apr 25 PHP
php下载文件源代码(强制任意文件格式下载)
May 09 PHP
phpMyAdmin安装并配置允许空密码登录
Jul 04 PHP
Yii实现显示静态页的方法
Apr 25 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
May 09 PHP
PHP数据库操作Helper类完整实例
May 11 PHP
yii2分页之实现跳转到具体某页的实例代码
Jun 02 PHP
360搜索引擎自动收录php改写方案
Apr 28 PHP
Laravel 中创建 Zip 压缩文件并提供下载的实现方法
Apr 02 PHP
laravel框架之数据库查出来的对象实现转化为数组
Oct 23 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文件目录基础操作
2014/11/11 PHP
php简单定时执行任务的实现方法
2015/02/23 PHP
PHP MYSQL实现登陆和模糊查询两大功能
2016/02/05 PHP
JS延迟加载(setTimeout) JS最后加载
2010/07/15 Javascript
jquery 提交值不为空的元素示例代码
2013/05/10 Javascript
javascript中的if语句使用介绍
2013/11/20 Javascript
JS+CSS实现仿新浪微博搜索框的方法
2015/02/24 Javascript
简介JavaScript中的setTime()方法的使用
2015/06/11 Javascript
Javascript类型转换的规则实例解析
2016/02/23 Javascript
js实现页面a向页面b传参的方法
2016/05/29 Javascript
BootStrap 实现各种样式的进度条效果
2016/12/07 Javascript
Node.js中的require.resolve方法使用简介
2017/04/23 Javascript
JS去掉字符串中所有的逗号
2017/10/18 Javascript
JS实现十字坐标跟随鼠标效果
2017/12/25 Javascript
js最简单的双向绑定实例讲解
2018/01/02 Javascript
浅谈SpringMVC中post checkbox 多选框value的值(隐藏域方式)
2018/01/08 Javascript
JS实现的哈夫曼编码示例【原始版与修改版】
2018/04/22 Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
2020/04/20 Javascript
基于JavaScript实现轮播图效果
2021/01/02 Javascript
[01:13]2014DOTA2西雅图邀请赛 舌尖上的TI4
2014/07/08 DOTA
利用Fn.py库在Python中进行函数式编程
2015/04/22 Python
python实现网站的模拟登录
2016/01/04 Python
Python中getpass模块无回显输入源码解析
2018/01/11 Python
python地震数据可视化详解
2019/06/18 Python
Python实现代码统计工具
2019/09/19 Python
python之语音识别speech模块
2020/09/09 Python
python 爬虫网页登陆的简单实现
2020/11/30 Python
在Ubuntu中安装并配置Pycharm教程的实现方法
2021/01/06 Python
CSS3制作缩略图的详细过程
2016/07/08 HTML / CSS
智能钱包:Ekster
2019/11/21 全球购物
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
2016/01/12 面试题
最美孝心少年事迹材料
2014/08/15 职场文书
挂职个人工作总结
2015/03/05 职场文书
2015年街道办事处工作总结
2015/05/22 职场文书
2016年寒假学习心得体会
2015/10/09 职场文书
golang语言指针操作
2022/04/14 Golang