假如需要调用方法a,方法a里面有方法b,他们都含有mysql事务,会报错,所以要用程序记录嵌套层数,里面方法报错,外面也不能提交
private $transaction_count = 0;//事务嵌套层级
public function beginTransaction() { ++ $this->transaction_count; if($this->transaction_count == 1){ $this->getDbHandle()->beginTransaction(); } return true; } /* * 提交一个事务(恢复到自动提交模式) * @return bool */ public function commit() { if($this->transaction_count == 1){ $this->getDbHandle()->commit(); } -- $this->transaction_count; return true; } /* * 回滚一个事务(恢复到自动提交模式, 当在一个事务内有类似删除或创建数据表等 DLL 语句时,会自动导致一个隐式地提交。隐式地提交将无法回滚此事务范围内的任何更改。) * @return bool */ public function rollBack() { $this->transaction_count = 0; return $this->getDbHandle()->rollBack(); }