thinkphp5.1事务操作 是否正确 如何判断是否成功

        $first=input('param.first');
        $second=input('param.second');


        Db::transaction(function ($first,$second) {
            $sort1=Db::name('user')->where('user_id',$first)->value('user_sort');
            $sort2=Db::name('user')->where('user_id',$second)->value('user_sort');

            Db::name('user')->where('user_id',$first)->setField('user_sort', $sort2);
            Db::name('user')->where('user_id',$second)->setField('user_sort', $sort1);

        });
阅读 4.9k
1 个回答

这种形式下发生异常会自动回滚,如果想要判定是否执行成功可以改成手动控制事务:

// 启动事务
Db::startTrans();
try {
    $sort1 = Db::name('user')->where('user_id', $first)->value('user_sort');
    $sort2 = Db::name('user')->where('user_id', $second)->value('user_sort');

    Db::name('user')->where('user_id', $first)->setField('user_sort', $sort2);
    Db::name('user')->where('user_id', $second)->setField('user_sort', $sort1);
    // 提交事务
    Db::commit();
} catch (\Exception $e) {
    // 回滚事务
    Db::rollback();
}

参考手册:https://www.kancloud.cn/manua...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题