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 相关文章推荐
linux php mysql数据库备份实现代码
Mar 10 PHP
php代码书写习惯优化小结
Jun 20 PHP
浅析关于PHP位运算的简单权限设计
Jun 30 PHP
提高PHP编程效率的方法
Nov 07 PHP
php使用cookie实现记住登录状态
Apr 27 PHP
PHP如何实现Unicode和Utf-8编码相互转换
Jul 29 PHP
分享php邮件管理器源码
Jan 06 PHP
php中序列化与反序列化详解
Feb 13 PHP
解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory
Feb 25 PHP
利用Laravel生成Gravatar头像地址的优雅方法
Dec 30 PHP
PHP调用接口用post方法传送json数据的实例
May 31 PHP
详解PHP 二维数组排序保持键名不变
Mar 06 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
模仿OSO的论坛(四)
2006/10/09 PHP
PHP中call_user_func_array()函数的用法演示
2012/02/05 PHP
基于empty函数的输出详解
2013/06/17 PHP
ThinkPHP之getField详解
2014/06/20 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
2014/11/22 PHP
PHP处理CSV表格文件的常用操作方法总结
2016/07/01 PHP
JavaScript中各种编码解码函数的区别和注意事项
2010/08/19 Javascript
关于火狐(firefox)及ie下event获取的两种方法
2012/12/27 Javascript
js 针对html DOM元素操作等经验累积
2014/03/11 Javascript
JS调用页面表格导出excel示例代码
2014/03/18 Javascript
WEB前端开发都应知道的jquery小技巧及jquery三个简写
2015/11/15 Javascript
Node.js程序中的本地文件操作用法小结
2016/03/06 Javascript
Javascript的表单验证-提交表单
2016/03/18 Javascript
IE8 内存泄露(内存一直增长 )的原因及解决办法
2016/04/06 Javascript
Jquery attr()方法 属性赋值和属性获取详解
2016/04/15 Javascript
JS实现数字格式千分位相互转换方法
2016/08/01 Javascript
JS实现table表格内针对某列内容进行即时搜索筛选功能
2018/05/11 Javascript
javascript对HTML字符转义与反转义
2018/12/13 Javascript
详解微信小程序-canvas绘制文字实现自动换行
2019/04/26 Javascript
微信js-sdk 录音功能的示例代码
2019/11/01 Javascript
javascript的hashCode函数实现代码小结
2020/08/11 Javascript
[01:31](回顾)杀出重围,决战TI之巅
2014/07/01 DOTA
[05:06]2017亚洲邀请赛DAC回顾片
2017/04/19 DOTA
python实现连接mongodb的方法
2015/05/08 Python
Python基于回溯法子集树模板解决取物搭配问题实例
2017/09/02 Python
python中验证码连通域分割的方法详解
2018/06/04 Python
在PyCharm下打包*.py程序成.exe的方法
2018/11/29 Python
解决reload(sys)后print失效的问题
2020/04/25 Python
HTML5中在title标题标签里设置小图标的方法
2020/06/23 HTML / CSS
服装公司总经理岗位职责
2013/11/30 职场文书
《东方明珠》教学反思
2014/04/20 职场文书
企业标语口号
2014/06/10 职场文书
教师演讲稿开场白
2014/08/25 职场文书
股东出资证明书范例
2014/10/04 职场文书
毕业设计论文评语
2014/12/31 职场文书
大学生入党自荐书
2015/03/05 职场文书