第十一章:第6节 PHP与MySQL——写一个操作mysql的类库(五)开启事务方法

更新于:2017-10-20 13:17:35

为我们的mysql类库再加上开启事务的方法,我们的类功能就算得上齐全了。如果只是简单的开启事务、事务提交、事务回滚其实不用单独写方法,直接用类的query方法执行SQL语句就可以了。所以,要求类的事务方法必须支持事务嵌套:


第一步


1.png


定义一个私有属性,17行,用来表示当前已开启几个事务。


第二步定义开启事务的方法:


1.png


详解:如果“事务指令数”为1,说明开启的事务不是嵌套事务,直接开启事务(用的是PDO类的方法)。如果“事务指令数”大于1,说明开启的事务是嵌套事务,生成折返点。


280行,这次用的是PDO的exec方法执行的SQL语句,PDO可执行SQL语句的方法有三个,了解更多《pdo query与execute的区别》


第三步提交事务


1.png

 

详解:只有最外层的事务提交才是commit,其他嵌套事务只是把“事务指令数”减1。


第四步回滚事务


1.png


详解:最外层的事务rollback回滚,嵌套的事务都是回滚到折返点。“事务指令数”减1。


好了,测试下我们的代码:


1.png


1.png


成功了,数据2没有插入数据库。


总结:


我们花了5节的时间就把一个mysql操作类写好了,后期我们会继续用Db类,还会对Db类做优化。大家要好好练习写出一个自己的Db类。


因为PHP手册中PDO类的介绍都是英文,不方便我们去理解每个方法都是做什么的,分享一篇学习文章给大家《php pdo内置类详解》。


其他说明:


我们以后写项目时都会用到框架(除非公司要求你用原生态代码),像Db类是框架的基础类库,根本用不着我们去写,直接用框架自带的Db类。趁着初学自己写一个Db类,加深学习加深理解,不然以后很少有机会去写。


本节学习代码》》》