PDO 错误机制|学习笔记

简介: 快速学习 PDO 错误机制

开发者学堂课程【PHP 进阶教程-由浅入深掌握面向对象开发-第三阶段PDO 错误机制】学习笔记,与课程紧密联系,让用户快速学习知识。  

课程地址:https://developer.aliyun.com/learning/course/713/detail/12741


PDO 错误机制

 

1、目标

PDO的一个错误机制,在异常学习中PHP其实也有一些错误处理的模式,它默认的是警告,出了错就直接报错,PDO是如何来实现这些错误的一个控制,变成一种我们可以控制的一种方式?就要了解PDO的一个错误机制。

目标:了解PDO错误机制这种机制,理解不同机制对应的效果。

2、概念&示例

这个概念指PDO在使用过程中,如果运行时候出现错误(大多的是SQL指令执行错误)的时候,那么PDO对应的处理方式就是它自己的错误机制,PDO提供三种错误机制,是通过一个PDO的常量PDO::ALTR_ERRMODE来选择的,这个属性常量的值对应三种,分别是如下:

1、PDO::ERRMODE_SILENT:静默模式,出错了不处理(默认的)

2、PDO::ERRMODE_WARNING:警告模式,出错了立马给出错误提示

3、PDO::ERRMODE_EXCEPETION:异常模式,出错了将错误交给异常PDOException对象

来具体看看这三种模式。第一个模式PDO::ERRMODE_SILENT,,执行一个错误,查看它的处理效果,比如输入:

第一个模式:$pdo=newPDO(_’mysql:host=locallhost;port=3306;dbname=db_2’’root’,’root’);

$pdo->exec(’insert into t_40 values()_’);#错误,但是不会报错

运行之后显示没有任何错误,这就是静默的处理方式,对开发者是致命的,拿不到错误,不知道哪里出错。

image.png第二个模式:警告模式$pdo=newPDO(_’mysql:host=locallhost;port=3306;dbname=db_2’’root’,’root’);

$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING)

$pdo->exec(’insert into t_40 values()_’);#错误:系统直接报错

它里面有个set Attribute,然后对应的这个常量,然后设置一个对应的值,不是把这个值赋给常量,常量是不能被复制的,它只是通过这个常量来判定你要做什么事情,然后再找出你的值去针对的去解决。其实里面有很多switch, switch设置为警告模式,再来运行同样的代码警告模式,需要主动告知PDO。所以这个代码先设定为警告模式,这样代码再往下面运行,有顺序先设定后运行,运行结果如下图,直接告诉warning 就报错了,所以警告这个效果很直接。

image.png第三个模式:$pdo=newPDO(_’mysql:host=locallhost;port=3306;dbname=db_2’’root’,’root’);

$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPETION)

Try{

$pdo->exec(’insert into t_40 values()_’);#错误:被捕捉到

}catch(PDOException $e){

#进入到异常处理

}

第三种是异常模式,需要修改为异常模式,Try catch可能出现的错误,一定要用 exception 这个类的对象来做,因为它出错了,他出来的 PDOException $e 这个对象。异常模式就要捕获,否则,如果不补足的话,它放在外面就出错了,它也是扔出一个异常,

image.png运行结果如下图,最终又变成了直接一个输出,因为异常没人捕获,所以它就直接报错,告诉哪个地方报错了。

image.png

如果不用这种方式,就用catch 来捕捉,这个try必须进行捕获,捕获#PDO中的所有的错误发生,都会产生一个PDOException类对象,既然产生了这个类对象,再捕捉之后,可以理解为echo“来了”,“来了”之后就可以按照自己的逻辑去处理。这就是三种模式。

image.pngimage.png

当然可以看所谓的PDOException异常类。会发现它就是继承了runtimeException里面东西,runtime又继承Exception,所以就有一个架构,这个就是架构的过程,内容会发现三个类都一样,除了名字不一样,其他都一样。所以要掌握这种继承的一个架构这种方式。

总结:

PDO中提供了多种处理机制,静默模式,警告模式,异常模式,其中警告模式,异常模式需要设置,因为静默模式是默认的,PDO可以通过PDO::setAttribute()方法来设定错误模式,但是一定要找准对应的这些要设置的内容,比如ATTR_ERRMODE,可以输出它就是一个数字,定义的一个常量,但是用ATTR_ERRMODE,你能很明确的知道当时要干嘛,以及为什么,就是要让我们知道这种东西,不要乱来,你用我固定的东西我才能帮你,正确的设置,是为了保证我们内部的结构不用去处理一些错误代码,错误的东西可以直接忽略,就相当于没设置,可以给他随便他设置,就是PDO中的一个错误的模式D的三种类型。

相关文章
|
JavaScript Java 关系型数据库
Springboot+vue的网上图书商城管理系统(有报告)。(购书➕借阅)Javaee项目,springboot vue前后端分离项目。
Springboot+vue的网上图书商城管理系统(有报告)。(购书➕借阅)Javaee项目,springboot vue前后端分离项目。
|
C语言
QT QtableView操作详解
本文实现了使用QtableView控件来显示数据,数据源使用txt文本作为数据源,使用了QStandardItemModel作为数据模型来实现了对TableView空间的初始化,和对txt数据源的增删改查功能。
1138 0
QT QtableView操作详解
|
JavaScript 前端开发 API
【Vue 透传Attributes】
【Vue 透传Attributes】
150 0
|
弹性计算
阿里云服务器IP地址查询_公网IP和私有IP查看
阿里云服务器IP地址查询_公网IP和私有IP查看
725 0
|
机器学习/深度学习 决策智能
博弈论-nim 游戏
博弈论-nim 游戏
286 0
博弈论-nim 游戏
|
机器学习/深度学习 存储 编解码
YOLO家族系列模型的演变:从v1到v8(下)
昨天的文章中,我们回顾了 YOLO 家族的前 9 个架构。本文中将继续总结最后3个框架,还有本月最新发布的YOLO V8.
1874 0
YOLO家族系列模型的演变:从v1到v8(下)
|
算法 Python
【力扣算法02】之寻找两个正序数组的中位数 - python
【力扣算法02】之寻找两个正序数组的中位数 - python
183 0
|
IDE 程序员 开发工具
IDE之VS:Visual Studio的简介(包括 VS2013、VS2015、VS2017、VS2019)、安装、入门、使用方法之详细攻略(二)
IDE之VS:Visual Studio的简介(包括 VS2013、VS2015、VS2017、VS2019)、安装、入门、使用方法之详细攻略
IDE之VS:Visual Studio的简介(包括 VS2013、VS2015、VS2017、VS2019)、安装、入门、使用方法之详细攻略(二)
Hyperledger Fabric Read-Write set semantics——读写集
Read-Write set semantics(读写集) 本文讨论了关于读写集当前实现的细节。   Transaction simulation and read-write set(事务模拟和读写集) 客户端提交事务到peer,peer会执行背书验证并模拟该事务的请求结果,为该事务的请求准备一个读写集。
1695 0
|
4天前
|
人工智能 运维 安全