选择语言 :

 Driver_Database_Driver_MySQL_Transaction::start

开启事务

Driver_Database_MySQL_Transaction Driver_Database_Driver_MySQL_Transaction::start( )
返回值
  • Driver_Database_MySQL_Transaction
File: ./drivers/database/mysql/transaction.class.php
public function start()
{
    if ($this->id)
    {
        throw new Exception('transaction has started');
    }
    # 推动连接主数据库
    $this->db_driver->connect(true);
    # 获取连接ID
    $this->_connection_id = $this->db_driver->connection_id();
    # 获取唯一ID
    $this->id = uniqid('TaId_' . rand());

    if (isset(Database_Driver_MySQL_Transaction::$transactions[$this->_connection_id]))
    {
        # 已存在事务,则该事务为子事务
        if ($this->_set_save_point())
        {
            //保存事务点
            Database_Driver_MySQL_Transaction::$transactions[$this->_connection_id][$this->id] = true;
        }
        else
        {
            $this->id = null;
            # 开启事务失败。
            throw new Exception('start sub transaction error');
        }
    }
    else
    {
        # 开启新事务
        $this->_query('SET AUTOCOMMIT=0;');
        if (true === $this->_query('START TRANSACTION;'))
        {
            # 如果没有建立到当前主服务器的连接,该操作会隐式的建立
            Database_Driver_MySQL_Transaction::$transactions[$this->_connection_id] = array($this->id => true);
        }
        else
        {
            $this->id = null;
            # 开启事务失败。
            throw new Exception('start transaction error');
        }
    }

    return true;
}