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 相关文章推荐
CakePHP去除默认显示的标题及图标的方法
Oct 22 PHP
详解php的魔术方法__get()和__set()使用介绍
Sep 19 PHP
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
May 07 PHP
php实现监听事件
Nov 06 PHP
ThinkPHP的截取字符串函数无法显示省略号的解决方法
Jun 25 PHP
php中把美国时间转为北京时间的自定义函数分享
Jul 28 PHP
PHP常用正则表达式集锦
Aug 17 PHP
PHP实现手机号码中间四位用星号(*)隐藏的自定义函数分享
Sep 27 PHP
php检测数组长度函数sizeof与count用法
Nov 17 PHP
WordPress中用于获取及自定义头像图片的PHP脚本详解
Dec 17 PHP
关于laravel5.5的定时任务详解(demo)
Oct 23 PHP
swoole锁的机制代码实例讲解
Mar 04 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
PHP 存储文本换行实现方法
2010/01/05 PHP
php的sprintf函数的用法 控制浮点数格式
2014/02/14 PHP
PHP动态生成javascript文件的2个例子
2014/04/11 PHP
php删除左端与右端空格的方法
2014/11/29 PHP
php实现的debug log日志操作类实例
2016/07/12 PHP
PHP中的密码加密的解决方案总结
2016/10/26 PHP
php curl中gzip的压缩性能测试实例分析
2016/11/08 PHP
jQuery+PHP实现图片上传并提交功能
2020/07/27 PHP
jquery判断字符输入个数(数字英文长度记为1,中文记为2,超过长度自动截取)
2010/10/15 Javascript
关于捕获用户何时点击window.onbeforeunload的取消事件
2011/03/06 Javascript
javascript+xml实现简单图片轮换(只支持IE)
2012/12/23 Javascript
jquery移除button的inline onclick事件(已测试及兼容浏览器)
2013/01/25 Javascript
javascript模拟订火车票和退票示例
2014/04/24 Javascript
浅谈js中的延迟执行和定时执行
2016/05/31 Javascript
详细谈谈AngularJS的子级作用域问题
2016/09/05 Javascript
使用原生js写ajax实例(推荐)
2017/05/31 Javascript
使用svg实现动态时钟效果
2018/07/17 Javascript
NodeJS实现同步的方法
2019/03/02 NodeJs
微信小程序 行的删除和增加操作实现详解
2019/09/29 Javascript
封装Vue Element的table表格组件的示例详解
2020/08/19 Javascript
[03:23]我的刀塔你不可能这么可爱 第一期金萌萌的故事
2014/06/20 DOTA
Python中关于使用模块的基础知识
2015/05/24 Python
python设置环境变量的原因和方法
2019/06/24 Python
使用Pandas将inf, nan转化成特定的值
2019/12/19 Python
django执行数据库查询之后实现返回的结果集转json
2020/03/31 Python
Python3+RIDE+RobotFramework自动化测试框架搭建过程详解
2020/09/23 Python
Django中使用Celery的方法步骤
2020/12/07 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
2021/01/28 Python
Shopty西班牙:缝纫机在线销售
2018/01/26 全球购物
东芝官网商城:还原日式美学,打造美好生活
2018/12/27 全球购物
求高于平均分的学生学号及成绩
2016/09/01 面试题
贷款委托书怎么写
2014/08/02 职场文书
思想作风整顿个人剖析材料
2014/10/06 职场文书
2014年加油站工作总结
2014/12/04 职场文书
2015年信访维稳工作总结
2015/04/07 职场文书
MySQL中B树索引和B+树索引的区别详解
2022/03/03 MySQL