Heim  >  Artikel  >  Backend-Entwicklung  >  PHP框架是如何处理MySQL事务多次开启和事务操作嵌套的?求框架源码

PHP框架是如何处理MySQL事务多次开启和事务操作嵌套的?求框架源码

WBOY
WBOYOriginal
2016-06-06 20:10:45872Durchsuche

一般的PHP框架是如何处理MySQL事务多次开启和事务操作嵌套的?求框架源码

回复内容:

一般的PHP框架是如何处理MySQL事务多次开启和事务操作嵌套的?求框架源码

哈哈,最近刚把这个功能提交到ThinkPHP主线上,原理是记录事务的嵌套数量,只在最外层提交事务。你可以参考参考:

<code>public function startTrans()
{
    $this->initConnect(true);
    if (!$this->_linkID) {
        return false;
    }
    //数据rollback 支持
    if (0 == $this->transTimes) {
        // 记录当前操作PDO
        $this->transPdo = $this->_linkID;
        $this->_linkID->beginTransaction();
    }
    $this->transTimes++;
    return;
}

public function commit()
{
    if ($this->transTimes == 1) {
        // 由嵌套事物的最外层进行提交
        $result = $this->_linkID->commit();
        $this->transTimes = 0;
        $this->transPdo = null;
        if (!$result) {
            $this->error();
            return false;
        }
    } else {
        $this->transTimes--;
    }
    return true;
}

public function rollback()
{
    if ($this->transTimes > 0) {
        $result = $this->_linkID->rollback();
        $this->transTimes = 0;
        $this->transPdo = null;
        if (!$result) {
            $this->error();
            return false;
        }
    }
    return true;
}
</code>

https://github.com/youmingdot/thinkphp/blob/master/ThinkPHP/Library/Think/Db/Driver.class.php#L267-L328

https://github.com/yeaha/owl/blob/master/src/Service/DB/Adapter.php#L132-L183

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn