首页 / 话题 / 后端 / 文章详情

thinkphp事务处理实例详细解释

一直在的 2022-07-01 | 阅读(879) | 评论(0

什么时候用事务处理?

如果你一次要修改数据库多个地方的数据,而要保证没处都要修改成功,如果有一处修改不成功,就会撤销其他的改动,以保证数据的完整性,比如我要把小明的用户余额200块钱转给小张,那么理应小张的余额增加200,小明的余额减掉200,那如果因为某些原因小张的余额没有增加而小明的余额减掉了,这个就不正常了。

代码实例:

         try {
 
            Db::startTrans();
 
            //将数据1存入表1,并获取ID:
            $re['t1'] = Db::name('table1')
                ->insertGetId([
                    'content1' => $content1
                ]);
 
            //将数据2写入表2
            $re['t2'] = Db::name('table2')
                ->insert([
                    'id' => $re['t1'],
                    'content2' => $content2
                ]);
 
            //任意一个表写入失败都会抛出异常:
            if (in_array('0', $re)) {        
                throw new Exception('意不意外?');
            }
 
            Db::commit();
            return $this->success('完美一击!');
 
        } catch (\Exception $e) {
            //如获取到异常信息,对所有表的删、改、写操作,都会回滚至操作前的状态:
            Db::rollback();
            return $this->error($e->getMessage());
 
        }
评论(0)
请登录
请登录后发表评论