我是靠谱客的博主 慈祥八宝粥,最近开发中收集的这篇文章主要介绍ThinkPHP5.0中的事务操作 --不能回滚,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

两周前才开始接触tp5。刚接触tp5.0的事务回滚。

环境:1. mysql使用的默认引擎是InnoDB 。2.前后使用的是同一个连接。3. 我要做的是批量插入数据,一条条检查,没错插入;有错回滚,之前的插入作废。4. 现在做的这个项目是tp5.0

1. 开始时因为不了解,每条检查完没问题时,插入该条数据,并“Db::commit();”,所以失败了。

事后总结:
1. Db::commit();//整个事务执行成功,可以理解为整个事务执行完了,我这里应该批量插入数据完成后再用这个方法,不应该插入一条commit()一下。
2. Db::rollback();//整个事务全部撤销,我是在检查数据时,不合格时用的,紧跟着return ‘xxxxxxxxx’;没问题。
3. Db::startTrans(); // 启动事务。
4. 按着ctrl,然后点击commit()这个方法,发现没有跳到commit()这个方法的定义处。跳到Db.class里,ctrl+f也搜不到commit()。其他两个方法也找不到。 但可以用,可以这样用。没问题。

2. 就是因为失败了, 之后又找不到commit()等方法,所以在tp5.1,自己写的demo中,各种试,还是不行。

事后总结:
1. tp5.1 有那三个方法。
2. 是数据库的表有问题,导致在tp5.0的项目里的都搞好了,tp5.1的还是不行。自己的demo用的数据库是我不知道从哪来的。一直都不认为表有问题,各种误解。
3. 把表导出来。


CREATE TABLE `think_data` (
`id` int(255) NOT NULL,
`data` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=29 DEFAULT CHARSET=utf8;

这样的才对

ENGINE=InnoDB DEFAULT CHARSET=utf8;

是表的问题,和tp5事务基础知识不了解的问题。

 Db::startTrans(); // 启动事务
Db::table('think_data')->insert(['id'=>28,'data'=>'thinkphp']);
Db::table('think_data')->insert(['id'=>1,'data'=>'thinkphp']);
Db::rollback();

正常的话,不报错(数据库没有id为1,28的数据),这两条插入语句不会起作用。

最后

以上就是慈祥八宝粥为你收集整理的ThinkPHP5.0中的事务操作 --不能回滚的全部内容,希望文章能够帮你解决ThinkPHP5.0中的事务操作 --不能回滚所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部