php实现的PDO异常处理操作分析


Posted in PHP onDecember 27, 2018

本文实例讲述了php实现的PDO异常处理操作。分享给大家供大家参考,具体如下:

异常处理:

PHP:默认为直接报错

MYSQL:默认为静默模式,错就错,不报错

PDO:默认为静默模式,错就错,不报错

以前,当PHP碰到错误的时候,会直接报错,错误处理会变得相当麻烦。后来,当错误发生之后,会将错误信息不再直接输出,放到一个类的对象里(PDOException)

要使用PDO异常处理,必须满足两个条件

1、需要将错误处理模式变成异常模式

$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

2、所有可能出错的语句都必须放到错误捕捉语句块里

try{
   //错误捕捉语句块
   //凡是有可能出现错误的语句都放在这
   //一旦出错会立即进入catch语句,把所有的错误信息放到PDOexception $e里面
}catch(PDOExecption $e){
   //将错误信息进行处理
}

例如:

try{
  //连接认证
  $pdo = new PDO('mysql:host=localhost;dbname=project','root','root');
  //设置错误处理模式
  $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
  //组织SQL
  $sql= "update pro_student set s_age = 123 where s_id = 20";
  $res = $pdo->exec($sql);
}catch(PDOException $e){
  //var_dump($e);
  //告诉用户在哪个文件的哪一行出现了什么样的错误
  echo '出现异常:<br/>';
  echo '错误出现的位置:' . $e->getFile() . $e->getLine() . '<br/>';
  echo '错误原因:' . $e->getMessage();
  var_dump($e->getTrace());//获取完整的错误数据
  exit;
}

有的时候,如果数据执行没有任何错误,但是就是不符合指定的业务逻辑。一旦出现业务逻辑错误,异常是没有办法捕捉(异常只捕捉语法错误),一般认为的去通过判断语句的执行(结果),主动抛出异常,从而结束错误程序的运行。

语法:throw new PDOException;

$sql = "select * from pro_student where s_id = 20";
$stmt = $pdo->query($sql);
if($stmt->fetchColumn(4) > 100) throw new PDOException; //抛出异常,立马跳转到catch语句块
else{
  echo '没有问题';
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php中判断一个字符串包含另一个字符串的方法
Mar 19 PHP
php 常用字符串函数总结
Mar 15 PHP
php Notice: Undefined index 错误提示解决方法
Aug 29 PHP
PHP字符编码问题之GB2312 VS UTF-8解决方法
Jun 23 PHP
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
Jun 18 PHP
深入file_get_contents与curl函数的详解
Jun 25 PHP
一个比较不错的PHP日历类分享
Nov 18 PHP
PHP文件缓存类示例分享
Jan 30 PHP
php保存信息到当前Session的方法
Mar 16 PHP
PHP 搜索查询功能实现
Nov 29 PHP
thinkPHP实现的省市区三级联动功能示例
May 05 PHP
解决PHPstudy Apache无法启动的问题【亲测有效】
Oct 30 PHP
CI框架网页缓存简单用法分析
Dec 26 #PHP
CI框架附属类用法分析
Dec 26 #PHP
Yii2.0 RESTful API 基础配置教程详解
Dec 26 #PHP
CI框架实现创建自定义类库的方法
Dec 25 #PHP
PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】
Dec 25 #PHP
PHP使用SOAP调用API操作示例
Dec 25 #PHP
详解PHP实现支付宝小程序用户授权的工具类
Dec 25 #PHP
You might like
ThinkPHP框架实现session跨域问题的解决方法
2014/07/01 PHP
PHP中round()函数对浮点数进行四舍五入的方法
2014/11/19 PHP
php+xml编程之SimpleXML的应用实例
2015/01/24 PHP
php上传图片并压缩的实现方法
2015/12/22 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
PHP的自定义模板引擎
2017/03/24 PHP
php + nginx项目中的权限详解
2017/05/23 PHP
php JWT在web端中的使用方法教程
2018/09/06 PHP
PHP正则表达式函数preg_replace用法实例分析
2020/06/04 PHP
直接生成打开窗口代码,不必下载
2008/05/14 Javascript
javascript 极速 隐藏/显示万行表格列只需 60毫秒
2009/03/28 Javascript
javascript 可以拖动的DIV(二)
2009/06/26 Javascript
javascript 哈希表(hashtable)的简单实现
2010/01/20 Javascript
jQuery 选择器项目实例分析及实现代码
2012/12/28 Javascript
jquery控制背景音乐开关与自动播放提示音的方法
2015/02/06 Javascript
基于jquery实现智能提示控件intellSeach.js
2016/03/17 Javascript
JS实用技巧小结(屏蔽错误、div滚动条设置、背景图片位置等)
2016/06/16 Javascript
js手机号批量滚动抽奖实现代码
2020/04/17 Javascript
JavaScript之iterable_动力节点Java学院整理
2017/06/29 Javascript
vue加载自定义的js文件方法
2018/03/13 Javascript
微信小程序scroll-x失效的完美解决方法
2018/07/18 Javascript
node实现分片下载的示例代码
2018/10/17 Javascript
通过实例学习React中事件节流防抖
2019/06/17 Javascript
Vue.js中Line第三方登录api的实现代码
2020/06/29 Javascript
[31:00]2014 DOTA2华西杯精英邀请赛5 24 NewBee VS iG
2014/05/25 DOTA
[42:25]EG vs Spirit Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
[39:08]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第一场 12.12
2020/12/16 DOTA
Python中利用sorted()函数排序的简单教程
2015/04/27 Python
手把手教你使用Python创建微信机器人
2019/04/29 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
2020/05/26 Python
在线服装零售商:SheIn
2016/07/22 全球购物
荷兰的时尚市场:To Be Dressed
2019/05/06 全球购物
美津浓巴西官方网站:Mizuno巴西
2019/07/24 全球购物
Made in Design德国:设计师家具、灯具和装饰
2019/10/31 全球购物
读书笔记怎么写
2015/07/01 职场文书
Nginx tp3.2.3 404问题解决方案
2021/03/31 Servers