开启事务
Driver_Database_MySQL_Transaction Driver_Database_Driver_MySQL_Transaction::start( )
Driver_Database_MySQL_Transaction
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;
}