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获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
Oct 11 PHP
PHP开发中常用的三个表单验证函数使用小结
Mar 03 PHP
按上下级层次关系输出内容的PHP代码
Jul 17 PHP
深入php函数file_get_contents超时处理的方法详解
Jun 03 PHP
如何判断php数组的维度
Jun 10 PHP
PHP 下载文件时自动添加bom头的方法实例
Jan 10 PHP
php操作MongoDB基础教程(连接、新增、修改、删除、查询)
Mar 25 PHP
php利用反射实现插件机制的方法
Mar 14 PHP
php写入、删除与复制文件的方法
Jun 20 PHP
PDO::getAvailableDrivers讲解
Jan 28 PHP
解决在Laravel 中处理OPTIONS请求的问题
Oct 11 PHP
Yii 框架入口脚本示例分析
May 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
overlord人气高涨,却被菲利普频繁举报,第四季很难在国内上映
2020/05/06 日漫
第九节 绑定 [9]
2006/10/09 PHP
给WordPress的编辑后台添加提示框的代码实例分享
2015/12/25 PHP
Zend Framework教程之连接数据库并执行增删查的方法(附demo源码下载)
2016/03/21 PHP
php ci 获取表单中多个同名input元素值的代码
2016/03/25 PHP
javascript操作cookie_获取与修改代码
2009/05/21 Javascript
将jQuery应用于login页面的问题及解决
2009/10/17 Javascript
javascript 拖动表格行实现代码
2011/05/05 Javascript
IE6下focus与blur错乱的解决方案
2011/07/31 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
2013/12/26 Javascript
编写高效jQuery代码的4个原则和5个技巧
2014/04/24 Javascript
jquery实现倒计时代码分享
2014/06/13 Javascript
jQuery提示效果代码分享
2014/11/20 Javascript
JavaScript数据绑定实现一个简单的 MVVM 库
2016/04/08 Javascript
设计模式中的组合模式在JavaScript程序构建中的使用
2016/05/18 Javascript
用js实现简单算法的实例代码
2016/09/24 Javascript
实例解析jQuery中如何取消后续执行内容
2016/12/01 Javascript
详解js的六大数据类型
2016/12/27 Javascript
JavaScript+CSS相册特效实例代码
2017/09/07 Javascript
SeaJS中use函数用法实例分析
2017/10/10 Javascript
vue-router路由懒加载的实现(解决vue项目首次加载慢)
2018/08/28 Javascript
小程序实现录音功能
2020/09/22 Javascript
[01:20]DOTA2 齐天大圣至宝动态展示
2016/12/13 DOTA
python中执行shell命令的几个方法小结
2014/09/18 Python
浅谈Python中的zip()与*zip()函数详解
2018/02/24 Python
使用50行Python代码从零开始实现一个AI平衡小游戏
2018/11/21 Python
python write无法写入文件的解决方法
2019/01/23 Python
python 字典套字典或列表的示例
2019/12/16 Python
Python生成六万个随机,唯一的8位数字和数字组成的随机字符串实例
2020/03/03 Python
selenium切换标签页解决get超时问题的完整代码
2020/08/30 Python
详解Django自定义图片和文件上传路径(upload_to)的2种方式
2020/12/01 Python
教育实践活动对照检查材料
2014/09/23 职场文书
学雷锋团日活动总结
2015/05/06 职场文书
redis实现排行榜功能
2021/05/24 Redis
详解Laravel服务容器的优势
2021/05/29 PHP
JavaScript架构localStorage特殊场景下二次封装操作
2022/06/21 Javascript