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中的Class的几点个人看法
Oct 09 PHP
兼容性最强的PHP生成缩略图的函数代码(修改版)
Jan 18 PHP
PHP中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
Mar 23 PHP
浅析SVN常见问题及解决方法
Jun 21 PHP
PHP实现全角字符转为半角方法汇总
Jul 09 PHP
PHP正则表达式入门教程(推荐)
May 18 PHP
Zend Framework数据库操作技巧总结
Feb 18 PHP
php strftime函数获取日期时间(switch用法)
May 16 PHP
PHP chr()函数讲解
Feb 11 PHP
php+Ajax无刷新验证用户名操作实例详解
Mar 04 PHP
PHP如何使用cURL实现Get和Post请求
Jul 11 PHP
PHP中isset、empty的用法与区别示例详解
Nov 05 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 escape URL编码
2008/12/10 PHP
php添加文章时生成静态HTML文章的实现代码
2013/02/17 PHP
兼容ie6浏览器的php下载文件代码分享
2014/07/14 PHP
ThinkPHP之用户注册登录留言完整实例
2014/07/22 PHP
php使用sql server验证连接数据库的方法
2014/12/25 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
php实现简易计算器
2020/08/28 PHP
Javascript MD4
2006/12/20 Javascript
JavaScript设置FieldSet展开与收缩
2009/05/15 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
2013/02/22 Javascript
js控制页面控件隐藏显示的两种方法介绍
2013/10/09 Javascript
jquery禁止输入数字以外的字符的示例(纯数字验证码)
2014/04/10 Javascript
再分享70+免费的jquery 图片滑块效果插件和教程
2014/12/15 Javascript
简介JavaScript中valueOf()方法的使用
2015/06/05 Javascript
详细解读JavaScript的跨浏览器事件处理
2015/08/12 Javascript
JS jQuery使用正则表达式去空字符的简单实现代码
2017/05/20 jQuery
React实现全局组件的Toast轻提示效果
2018/09/21 Javascript
Vue发布项目实例讲解
2019/07/17 Javascript
vue不操作dom实现图片轮播的示例代码
2019/12/18 Javascript
pygame学习笔记(6):完成一个简单的游戏
2015/04/15 Python
python学习之面向对象【入门初级篇】
2017/01/21 Python
Python设计实现的计算器功能完整实例
2017/08/18 Python
python字符串的方法与操作大全
2018/01/30 Python
Window 64位下python3.6.2环境搭建图文教程
2018/09/19 Python
python实现得到当前登录用户信息的方法
2019/06/21 Python
pygame实现俄罗斯方块游戏(AI篇1)
2019/10/29 Python
TensorFlow2.0:张量的合并与分割实例
2020/01/19 Python
python实现吃苹果小游戏
2020/03/21 Python
html5指南-4.使用Geolocation实现定位功能
2013/01/07 HTML / CSS
学期自我鉴定范文
2013/10/01 职场文书
四川成都导游欢迎词
2014/01/18 职场文书
爱情寄语大全
2014/04/09 职场文书
给女朋友道歉的话大全
2015/01/20 职场文书
政协常委会议主持词
2015/07/03 职场文书
CSS3 实现NES游戏机的示例代码
2021/04/21 HTML / CSS
Centos系统通过Docker安装并搭建MongoDB数据库
2022/04/12 MongoDB