zoukankan      html  css  js  c++  java
  • ThinkPHP v3.2.3 数据库读写分离,开启事务时报错:There is no active transaction

    如题:ThinkPHP v3.2.3 数据库读写分离,开启事务时报错:

    ERR: There is no active transaction

    刚开始以为是数据表引擎不对造成的,因为 有几张表的引擎是 MyISAM,后来调整过来了,改为 InnoDB,还是报错。应该是TP 底层连数据库时,切换数据库连接时出了点问题,解决方案如下:

    打开文件 ThinkPHP/Library/Think/Db/Driver.class.php,调整内容如下:

    /**
     * 启动事务
     *
     * @access public
     * @return void
     */
    public function startTrans() {
    	$this->initConnect(true);
    	if ( !$this->_linkID ) return false;
    	// 数据rollback 支持
    	if ($this->transTimes == 0) {
    		//$this->_linkID->beginTransaction(); // by 52php.cnblogs.com
    		foreach ($this->linkID as $_linkId) {
    			$_linkId->beginTransaction();
    		}
    	}
    	$this->transTimes++;
    	return ;
    }
    
    /**
     * 用于非自动提交状态下面的查询提交
     *
     * @access public
     * @return boolean
     */
    public function commit() {
    	if ($this->transTimes > 0) {
    		//$result = $this->_linkID->commit(); // by 52php.cnblogs.com
    		foreach ($this->linkID as $_linkId) {
    			$result = $_linkId->commit();
    		}
    
    		$this->transTimes = 0;
    		if(!$result){
    			$this->error();
    			return false;
    		}
    	}
    	return true;
    }
    
    /**
     * 事务回滚
     *
     * @access public
     * @return boolean
     */
    public function rollback() {
    	if ($this->transTimes > 0) {
    		//$result = $this->_linkID->rollback(); // by 52php.cnblogs.com
    		foreach ($this->linkID as $_linkId) {
    			$result = $_linkId->rollback();
    		}
    
    		$this->transTimes = 0;
    		if(!$result){
    			$this->error();
    			return false;
    		}
    	}
    	return true;
    }

    问题解决!

  • 相关阅读:
    Asp.Net基础 9.Web开发原则
    JavaScript – 1.事件 + 2.变量 + 3.判断变量初始化 + 4.函数的声明 + 5.匿名函数
    DOM – 3.window对象的属性
    Dom – 1.window对象事件 + 2.body、document对象的事件
    faint
    开会
    it's over
    so funny
    no topic
    震惊:有良医生揭无良献血内幕!
  • 原文地址:https://www.cnblogs.com/52php/p/6089110.html
Copyright © 2011-2022 走看看