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程序实现支持页面后退的两种方法
Jun 30 PHP
PHP 文件扩展名 获取函数
Jun 03 PHP
一个php短网址的生成代码(仿微博短网址)
May 07 PHP
php实现的css文件背景图片下载器代码
Nov 11 PHP
php使用pdo连接报错Connection failed SQLSTATE的解决方法
Dec 15 PHP
PHP中捕获超时事件的方法实例
Feb 12 PHP
php和editplus正则表达式去除空白行
Apr 17 PHP
为你总结一些php系统类函数
Oct 21 PHP
YII Framework框架教程之使用YIIC快速创建YII应用详解
Mar 15 PHP
PHP实现的随机IP函数【国内IP段】
Jul 20 PHP
PHP通过文件路径获取文件名的实例代码
Oct 14 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
《星际争霸重制版》兵种对比图鉴
2020/03/02 星际争霸
PHP连接MSSQL2008/2005数据库(SQLSRV)配置实例
2014/10/22 PHP
PHP结合Ueditor并修改图片上传路径
2016/10/16 PHP
PHP实现类似于C语言的文件读取及解析功能
2017/09/01 PHP
childNodes.length与children.length的区别
2009/05/14 Javascript
非主流的textarea自增长实现js代码
2011/12/20 Javascript
JavaScript判断变量是否为undefined的两种写法区别
2013/12/04 Javascript
在javascript中如何得到中英文混合字符串的长度
2014/01/17 Javascript
JavaScript框架(iframe)操作总结
2014/04/16 Javascript
javascript关于运动的各种问题经典总结
2015/04/27 Javascript
CKEditor无法验证的解决方案(js验证+jQuery Validate验证)
2016/05/09 Javascript
浅谈angularJS中的事件
2016/07/12 Javascript
jQuery实现可拖拽的许愿墙效果【附demo源码下载】
2016/09/14 Javascript
js表单登陆验证示例
2016/10/19 Javascript
canvas快速绘制圆形、三角形、矩形、多边形方法介绍
2016/12/29 Javascript
详解vue 模版组件的三种用法
2017/07/21 Javascript
webpack配置sass模块的加载的方法
2017/07/30 Javascript
Nginx设置为Node.js的前端服务器方法总结
2019/03/27 Javascript
微信小程序下拉菜单效果的实例代码
2019/05/14 Javascript
原生js实现针对Dom节点的CRUD操作示例
2019/08/26 Javascript
微信小程序实现天气预报功能(附源码)
2020/12/10 Javascript
Python中的数学运算操作符使用进阶
2016/06/20 Python
python爬取NUS-WIDE数据库图片
2016/10/05 Python
Python 列表(List) 的三种遍历方法实例 详解
2017/04/15 Python
Numpy中转置transpose、T和swapaxes的实例讲解
2018/04/17 Python
详解python之heapq模块及排序操作
2019/04/04 Python
Django urls.py重构及参数传递详解
2019/07/23 Python
如何在django中添加日志功能
2020/02/06 Python
jupyter lab文件导出/下载方式
2020/04/22 Python
新手学python应该下哪个版本
2020/06/11 Python
使用CSS媒体查询(Media Queries)和JavaScript判断浏览器设备类型的方法
2014/04/03 HTML / CSS
HTML5实现晶莹剔透的雨滴特效
2014/05/14 HTML / CSS
机工车间主任岗位职责
2014/03/05 职场文书
计划生育宣传标语
2014/06/21 职场文书
2016幼儿园新学期寄语
2015/12/03 职场文书
MySQL 外键约束和表关系相关总结
2021/06/20 MySQL