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用户指南-cookies部分
Oct 09 PHP
php采集时被封ip的解决方法
Aug 29 PHP
超级实用的7个PHP代码片段分享
Jan 05 PHP
php 计划任务 检测用户连接状态
Mar 29 PHP
php jq jquery getJSON跨域提交数据完整版
Sep 13 PHP
PHP邮件发送类PHPMailer用法实例详解
Sep 22 PHP
又十个超级有用的PHP代码片段
Sep 24 PHP
PHP实现的登录页面信息提示功能示例
Jul 24 PHP
PHP strripos函数用法总结
Feb 11 PHP
php依赖注入知识点详解
Sep 23 PHP
解决laravel中日志权限莫名变成了root的问题
Oct 17 PHP
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
Aug 17 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
基于MySQL分区性能的详细介绍
2013/05/02 PHP
PHP添加Xdebug扩展的方法
2014/02/12 PHP
PHP中实现接收多个name相同但Value不相同表单数据实例
2015/02/03 PHP
PHP图片加水印实现方法
2016/05/06 PHP
laravel 出现command not found问题的解决方案
2019/10/23 PHP
javascript之学会吝啬 精简代码
2010/04/25 Javascript
不同浏览器的怪癖小结
2010/07/11 Javascript
JS DOM 操作实现代码
2010/08/01 Javascript
点击按钮或链接不跳转只刷新页面的脚本整理
2013/10/22 Javascript
js根据日期判断星座的示例代码
2014/01/23 Javascript
JS实现网页表格自动变大缩小的方法
2015/03/09 Javascript
jQuery的end()方法使用详解
2015/07/15 Javascript
javascript实现html页面之间参数传递的四种方法实例分析
2015/12/15 Javascript
JS模拟按钮点击功能的方法
2015/12/22 Javascript
jQuery EasyUI常用数据验证汇总
2016/09/18 Javascript
Bootstrap导航中表单简单实现代码
2017/03/06 Javascript
基于jQuery对象和DOM对象和字符串之间的转化实例
2017/08/08 jQuery
angularJs中$http获取后台数据的实例讲解
2018/08/08 Javascript
用Cordova打包Vue项目的方法步骤
2019/02/02 Javascript
详解js创建对象的几种方法及继承
2019/04/12 Javascript
node crawler如何添加promise支持
2020/02/01 Javascript
Js和VUE实现跑马灯效果
2020/05/25 Javascript
[11:01]2014DOTA2西雅图邀请赛 冷冷带你探秘威斯汀
2014/07/08 DOTA
python中mechanize库的简单使用示例
2014/01/10 Python
深入理解Python装饰器
2016/07/27 Python
python logging日志模块原理及操作解析
2019/10/12 Python
pandas中的数据去重处理的实现方法
2020/02/10 Python
娇韵诗俄罗斯官方网站:Clarins俄罗斯
2020/10/03 全球购物
美国椅子和沙发制造商:La-Z-Boy
2020/10/25 全球购物
毕业生自我鉴定实例
2014/01/21 职场文书
安全生产工作汇报
2014/10/28 职场文书
2015年医院工作总结范文
2015/04/09 职场文书
网络妈妈观后感
2015/06/08 职场文书
2015年中学图书馆工作总结
2015/07/22 职场文书
初中班主任教育随笔
2015/08/15 职场文书
Redis监控工具RedisInsight安装与使用
2022/03/21 Redis