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 相关文章推荐
dede全站URL静态化改造[070414更正]
Apr 17 PHP
iis下php mail函数的sendmail配置方法(官方推荐)
Apr 25 PHP
php数组一对一替换实现代码
Aug 31 PHP
PHP gbk环境下json_dencode传送来的汉字
Nov 13 PHP
mantis安装、配置和使用中的问题小结
Jul 14 PHP
在Nginx上部署ThinkPHP项目教程
Feb 02 PHP
PHP读取PPT文件的方法
Dec 10 PHP
php设计模式之委托模式
Feb 13 PHP
Laravel Memcached缓存驱动的配置与应用方法分析
Oct 08 PHP
PHP查询大量数据内存耗尽问题的解决方法
Oct 28 PHP
PHP的中使用非缓冲模式查询数据库的方法
Feb 05 PHP
关于Laravel参数验证的一些疑与惑
Nov 19 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 带逗号千位符数字的处理方法
2012/01/10 PHP
php中mysql连接和基本操作代码(快速测试使用,简单方便)
2014/04/25 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
2018/04/08 PHP
PHP实现负载均衡的加权轮询方法分析
2018/08/22 PHP
php array_map()函数实例用法
2021/03/03 PHP
显示js对象所有属性和方法的函数
2009/10/16 Javascript
js中的数组Array定义与sort方法使用示例
2013/08/29 Javascript
简介JavaScript中valueOf()方法的使用
2015/06/05 Javascript
JavaScript实现将数组数据添加到Select下拉框的方法
2015/08/21 Javascript
jQuery实现图片轮播特效代码分享
2015/09/15 Javascript
javascript实现加载xml文件的方法
2015/11/24 Javascript
基于jquery实现最简单的选项卡切换效果
2016/05/08 Javascript
js给table赋值的实例代码
2016/10/13 Javascript
简单模拟node.js中require的加载机制
2016/10/27 Javascript
原生js验证简洁注册登录页面
2016/12/17 Javascript
Node.js创建HTTP文件服务器的使用示例
2018/05/11 Javascript
Vue.js项目中管理每个页面的头部标签的两种方法
2018/06/25 Javascript
javascript中数组的常用算法深入分析
2019/03/12 Javascript
vue.js表单验证插件(vee-validate)的使用教程详解
2019/05/23 Javascript
JS表格的动态操作完整示例
2020/01/13 Javascript
Vue 同步异步存值取值实现案例
2020/08/05 Javascript
React实现todolist功能
2020/12/28 Javascript
微信小程序onShareTimeline()实现分享朋友圈
2021/01/07 Javascript
Python对小数进行除法运算的正确方法示例
2014/08/25 Python
python smtplib模块发送SSL/TLS安全邮件实例
2015/04/08 Python
python获取本机mac地址和ip地址的方法
2015/04/29 Python
python 除法保留两位小数点的方法
2018/07/16 Python
对pandas里的loc并列条件索引的实例讲解
2018/11/15 Python
Python通过两个dataframe用for循环求笛卡尔积
2020/04/29 Python
pycharm Tab键设置成4个空格的操作
2021/02/26 Python
美国著名的户外用品品牌:L.L.Bean
2018/01/05 全球购物
餐饮业经理竞聘演讲稿
2014/01/14 职场文书
升国旗仪式主持词
2014/03/19 职场文书
幼儿园大班毕业教师寄语
2014/04/03 职场文书
2015教师见习期工作总结
2014/12/12 职场文书
羊脂球读书笔记
2015/06/30 职场文书