ThinkPHP5.0中的事务操作 –不能回滚

  • Post author:
  • Post category:php


两周前才开始接触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的数据),这两条插入语句不会起作用。



版权声明:本文为dw33xn原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。