function BeginTrans() { if ($this->transOff) { return true; } $this->transCnt += 1; $this->_autocommit = false; //$this->_connectionID->setAttribute(PDO::ATTR_AUTOCOMMIT,false); return $this->_connectionID->beginTransaction(); } function CommitTrans($ok=true) { if ($this->transoff){ return true; } if (!$ok){ return $this->RollbackTrans(); } if($this->transCnt) { $this->transCnt -= 1; } $this-> autocommit = true; $ret = $this-> connectionID->commit(); //$this-> connectionID->setAttribute(PDO::ATTR AUTOCOMMIT,true); return $ret; } 执行以上程序报错Uncaught PDOException: There is no active transaction in,怎么修改
时间: 2024-03-16 15:45:59 浏览: 143
根据错误提示,该程序报错的原因是当前没有激活的事务。因此,可以在 `CommitTrans()` 方法中添加一些判断,以确保在提交事务之前事务已经被激活。
修改后的代码如下所示:
```
function BeginTrans() {
if ($this->transOff) {
return true;
}
$this->transCnt += 1;
$this->_autocommit = false;
//$this->_connectionID->setAttribute(PDO::ATTR_AUTOCOMMIT,false);
return $this->_connectionID->beginTransaction();
}
function CommitTrans($ok=true) {
if ($this->transoff){
return true;
}
if (!$ok){
return $this->RollbackTrans();
}
if($this->transCnt <= 0) { // 添加判断,确保事务已经被激活
return false;
}
$this-> transCnt -= 1;
if ($this->transCnt == 0) { // 如果当前没有活动事务,则开启自动提交
$this-> autocommit = true;
}
$ret = $this-> connectionID->commit();
//$this-> connectionID->setAttribute(PDO::ATTR AUTOCOMMIT,true);
return $ret;
}
```
以上修改后的代码添加了两个判断:
1. 在 `CommitTrans()` 方法中,如果当前没有激活的事务,则返回 false。
2. 在 `$this->transCnt` 减为 0 后,开启自动提交。这是为了避免在没有事务的情况下使用非事务方式提交数据。
希望这可以帮助你解决问题。
阅读全文