开启事务/结束事务

Posted ningjiabing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开启事务/结束事务相关的知识,希望对你有一定的参考价值。

    /**
     * 开启事务
     * 
     * @param function $callback 可选, 事务之内的业务逻辑, 抛出异常回滚或成功时返回消息
     * @return bool/exception/string 未设置参数时返回true, 出错时返回ThinkException异常对象, 成功时返回提示消息
     */
    public static function start($callback = null) {
        D()->startTrans();

        if ($callback && is_callable($callback)) {
            try {
                return $callback();
            } catch (ThinkException $e) {
                return $e;
            }
        }

        return true;
    }

    /**
     * 结束事务
     * 
     * @param string/object $msg 可选, 成功时为消息, 出错时为异常对象
     * @param boolean $success 可选, 是否提交事务, 默认true, 设置为false则执行回滚
     * @return bool/exception/string 未设置参数时返回true, 出错时返回ThinkException异常对象, 成功时返回提示消息
     */
    public static function end($msg = ‘‘, $success = true) {
        // 如果$msg传递为异常类 则抛出错误信息
        if (is_object($msg)) {
            $obj = new ReflectionClass($msg);

            do {
                if ($obj->name == ‘Exception‘) {
                    $success = false;
                    $msg = $msg->getMessage();
                    break;
                }
            }
            while ($obj = $obj->getParentClass());
        }

        if ($success) {
            D()->commit();
        }
        else {
            D()->rollback();
        }

        $action = $success ? ‘success‘ : ‘error‘;
        return [
            ‘status‘ => $action,
            ‘msg‘ => $msg
        ];
    }

 

以上是关于开启事务/结束事务的主要内容,如果未能解决你的问题,请参考以下文章

Oracle - 数据更新 - 事务

事件,存储

数据库TCL语言的学习

专业知识

MYSQL:事务与锁

redis