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 相关文章推荐
多数据表共用一个页的新闻发布
Oct 09 PHP
PHP小技巧搜集,每个PHPer都来露一手
Jan 02 PHP
自动分页的不完整解决方案
Jan 12 PHP
Php 构造函数construct的前下划线是双的_
Dec 08 PHP
PHP 检查扩展库或函数是否可用的代码
Apr 06 PHP
php页面消耗内存过大的处理办法
Mar 18 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(四)
Jun 23 PHP
PHP实现图片裁剪、添加水印效果代码
Oct 01 PHP
PHP程序员常见的40个陋习,你中了几个?
Nov 20 PHP
Yii使用Captcha验证码的方法
Dec 28 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
Aug 15 PHP
php的命名空间与自动加载实现方法
Aug 25 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+JS实现搜索自动提示(实例)
2013/06/09 PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
2016/12/21 PHP
php中str_pad()函数用法分析
2017/03/28 PHP
Yii 2.0实现联表查询加搜索分页的方法示例
2017/08/02 PHP
用JS操作FRAME中的IFRAME及其内容的实现代码
2008/07/26 Javascript
浅析JQuery获取和设置Select选项的常用方法总结
2013/07/04 Javascript
基于JavaScript 下namespace 功能的简单分析
2013/07/05 Javascript
点击进行复制的JS代码实例
2013/08/23 Javascript
js使用循环清空某个div中的input标签值
2014/09/29 Javascript
基于jquery实现鼠标滚轮驱动的图片切换效果
2015/10/26 Javascript
基于JavaScript操作DOM常用的API小结
2015/12/01 Javascript
jQuery+canvas实现的球体平抛及颜色动态变换效果
2016/01/28 Javascript
jQuery绑定事件on()与弹窗的简要概述
2016/04/27 Javascript
基于jQuery实现滚动刷新效果
2017/01/09 Javascript
Bootstrap轮播图学习使用
2017/02/10 Javascript
浅谈angular2路由预加载策略
2017/10/04 Javascript
Angular实现双向折叠列表组件的示例代码
2017/11/21 Javascript
使用vue.js在页面内组件监听scroll事件的方法
2018/09/11 Javascript
vue基础之事件简写、事件对象、冒泡、默认行为、键盘事件实例分析
2019/03/11 Javascript
详解可以用在VS Code中的正则表达式小技巧
2019/05/14 Javascript
Vue.js中的高级面试题及答案
2020/01/13 Javascript
浅谈JSON5解决了JSON的两大痛点
2020/12/14 Javascript
Python入门教程之运算符与控制流
2016/08/17 Python
python plotly绘制直方图实例详解
2019/07/22 Python
Python检测端口IP字符串是否合法
2020/06/05 Python
html5指南-7.geolocation结合google maps开发一个小的应用
2013/01/07 HTML / CSS
如何通过jdbc调用存储过程
2012/04/19 面试题
小学音乐教学反思
2014/02/05 职场文书
便利店促销方案
2014/02/20 职场文书
消防安全承诺书
2014/05/22 职场文书
购房委托书
2014/10/15 职场文书
运动会运动员赞词
2015/07/22 职场文书
您对思维方式了解多少?
2019/12/09 职场文书
DIV CSS实现网页背景半透明效果
2021/12/06 HTML / CSS
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
2022/04/30 Vue.js
Mysql中常用的join连接方式
2022/05/11 MySQL