技术饭
ThinkPHP使用数据库读写分离时,开启事务时报错:There is no active transaction
copylian
0 评论
20400 浏览
2017.05.22
ThinkPHP使用数据库读写分离时,开启事务时报错: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;}感谢你的支持,我会继续努力!
扫码打赏,感谢您的支持!
文明上网理性发言!