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,调整内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
/**
启动事务
*
* @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;
}
|
问题解决!