php PDO异常处理详解


Posted in PHP onNovember 20, 2016

异常处理:

PHP:默认为直接报错

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

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

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

pdo异常处理设置:

设置PDO::ATTR_ERRMODE ,有以下三个值:

PDO::ERRMODE_SILENT: 默认模式,不主动报错,需要主动以 $pdo->errorInfo()的形式获取错误信息。

PDO::ERRMODE_WARNING: 引发 E_WARNING 错误,主动报错

PDO::ERRMODE_EXCEPTION: 主动抛出 exceptions 异常,需要以try{}cath(){}输出错误信息。

实例:

方式一:

<?php
//默认是不提示的 需要用 errorCode() errorInfo();
try{
  $pdo = new PDO("mysql:host=localhost;dbname=jikexueyuan","root","");
  //下面这句是默认设置,有无均可
  $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_SILENT);
}catch(PDOException $e){
  die("数据库连接失败".$e->getMessage());
}
$sql = "insert into stuu values(null,'jike','w',55)";
$res = $pdo->exec($sql);
if($res){
  echo "OK";
}else{
  echo $pdo->errorCode();
  print_r($pdo->errorInfo());
}

方式二:

<?php
try{
  $pdo = new PDO("mysql:host=localhost;dbname=jikexueyuan","root","");
  //主动以警告的形式报错
  $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
}catch(PDOException $e){
  die("数据库连接失败".$e->getMessage());
}
$sql = "insert into stuu values(null,'jike','w',55)";
//若有错误直接在浏览器页面中显示错误信息
$res = $pdo->exec($sql);

方式三:

<?php
try{
  $pdo = new PDO("mysql:host=localhost;dbname=jikexueyuan","root","");
  //主动抛出异常
  $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION );
}catch(PDOException $e){
  die("数据库连接失败".$e->getMessage());
}
$sql = "insert into stuu values(null,'jike','w',55)";
//用try{}catch(){}抓取异常
try{
  $res = $pdo->exec($sql);
}catch(PDOException $e){
  echo $e->getMessage();
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用PHP能有所帮助,如果有疑问大家可以留言交流。

PHP 相关文章推荐
PHP出错界面
Oct 09 PHP
关于PHP中的Class的几点个人看法
Oct 09 PHP
php中使用Imagick实现图像直方图的实现代码
Aug 30 PHP
基于wordpress主题制作的具体实现步骤
May 10 PHP
用PHP实现弹出消息提示框的两种方法
Dec 17 PHP
php冒泡排序、快速排序、快速查找、二维数组去重实例分享
Apr 24 PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
Jun 17 PHP
PHP实现批量检测网站是否能够正常打开的方法
Aug 23 PHP
PHP数组相加操作及与array_merge的区别浅析
Nov 26 PHP
Yii框架实现对数据库的CURD操作示例
Sep 03 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
Feb 21 PHP
PHP Pipeline 实现中间件的示例代码
Apr 26 PHP
php.ini中date.timezone设置详解
Nov 20 #PHP
centos 7.2下搭建LNMP环境教程
Nov 20 #PHP
浅析php中array_map和array_walk的使用对比
Nov 20 #PHP
php解决DOM乱码的方法示例代码
Nov 20 #PHP
使用Yii2实现主从数据库设置
Nov 20 #PHP
php 二维数组时间排序实现代码
Nov 19 #PHP
php原生导出excel文件的两种方法(推荐)
Nov 19 #PHP
You might like
dede3.1分页文字采集过滤规则详说(图文教程)续二
2007/04/03 PHP
php一个找二层目录的小东东
2012/08/02 PHP
php基于jquery的ajax技术传递json数据简单实例
2016/04/15 PHP
PHP 信号管理知识整理汇总
2017/02/19 PHP
深入讲解PHP的对象注入(Object Injection)
2017/03/01 PHP
Mac下快速搭建PHP开发环境步骤详解
2019/05/05 PHP
javascript 继承实现方法
2009/08/26 Javascript
js中document.write使用过程中的一点疑问解答
2014/03/20 Javascript
AngularJS基础知识
2014/12/21 Javascript
javascript中sort()的用法实例分析
2015/01/30 Javascript
如何实现json数据可视化详解
2016/11/24 Javascript
带你快速理解javascript中的事件模型
2017/08/14 Javascript
Node.js中使用mongoose操作mongodb数据库的方法
2017/09/12 Javascript
基于node下的http小爬虫的示例代码
2018/01/11 Javascript
jQuery插件Validation表单验证详解
2018/05/26 jQuery
vue+element-ui动态生成多级表头的方法
2018/08/28 Javascript
angular4自定义表单控件[(ngModel)]的实现
2018/11/23 Javascript
layer 关闭指定弹出层的例子
2019/09/25 Javascript
vue 解决路由只变化参数页面组件不更新问题
2019/11/05 Javascript
[51:00]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
2016/06/14 Python
python实现飞机大战微信小游戏
2020/03/21 Python
Python 日志logging模块用法简单示例
2019/10/18 Python
Python实现加密接口测试方法步骤详解
2020/06/05 Python
Python如何将模块打包并发布
2020/08/30 Python
介绍一下XMLHttpRequest对象
2012/02/12 面试题
工地门卫岗位职责
2013/12/30 职场文书
三年级数学教学反思
2014/01/31 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
三八妇女节标语
2014/10/09 职场文书
教师党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
2014年社区民政工作总结
2014/12/02 职场文书
Vue3.0中Ref与Reactive的区别示例详析
2021/07/07 Vue.js
【DOTA2】高能暴走TK秀!PSG LGD vs ASTER - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA
详解SQL的窗口函数
2022/04/21 Oracle
Java 异步任务计算FutureTask
2022/04/28 Java/Android