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的三种类型。

相关文章
|
IDE 关系型数据库 MySQL
MySQL 异常:这一篇就够了,MySQL 抛出异常的几种常见解决方式小结
MySQL 异常:这一篇就够了,MySQL 抛出异常的几种常见解决方式小结
830 0
MySQL 异常:这一篇就够了,MySQL 抛出异常的几种常见解决方式小结
sqlite3_stmt 机制
销毁sqlite3_stmt对象,使用sqlite3_finalize()函数,一般是循环操作完成后,销毁。
|
SQL PHP 开发者
封装 PDO(读操作+测试)|学习笔记
快速学习封装 PDO(读操作+测试)
封装 PDO(读操作+测试)|学习笔记
|
SQL 关系型数据库 MySQL
PDO 写操作|学习笔记
快速学习 PDO 写操作,利用PDO类完成一个完整的写操作实现,实现数据库的操作。
PDO 写操作|学习笔记
|
PHP 开发者
封装 PDO(异常封装)|学习笔记
快速学习封装 PDO(异常封装)
封装 PDO(异常封装)|学习笔记
|
关系型数据库 MySQL PHP
PDO 扩展|学习笔记
快速学习 PDO 扩展,掌握 PDO 扩展的加载
PDO 扩展|学习笔记
|
SQL 安全 关系型数据库
PDO 读操作|学习笔记
快速学习 PDO 读操作
PDO 读操作|学习笔记
|
PHP 开发者
PDO 异常学习路径|学习笔记
快速学习 PDO 异常学习路径
|
SQL 关系型数据库 MySQL
数据库编程 MySQL 常见异常和解决办法
mysqlslap 可以用于模拟服务器的负载,并输出计时信息。测试时,可以指定并发连接数,可以指定 SQL 语句。如果没有指定 SQL 语句,mysqlslap 会自动生成查询 schema 的 SELECT 语句。但是可能会报错
|
SQL PHP 开发者
封装 PDO(写操作)|学习笔记
快速学习封装 PDO(写操作)