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;
    }

    问题解决!

  • 相关阅读:
    数组
    Fiddler抓手机APP包
    APP测试注意点-安装卸载与运行
    【转】查看iOS崩溃日志
    Monkey 命令
    python del 函数
    探索性测试方法
    解决5037端口占用的方法
    App测试Android的闪退总结
    Jenkins邮件配置
  • 原文地址:https://www.cnblogs.com/52php/p/6089110.html
Copyright © 2011-2022 走看看