我需要一些帮助。
我有不同的文件。例如:
在所有页面(news.php除外)上,事务在脚本开头启动,并在脚本结束时结束。
在index.php和news.php这样的网页上,我包含了pay.php。但问题是:当我访问index.php时,事务已经开始,所以现在有两个事务处于活动状态!但我无法从pay.php中删除transaction-start,因为如果我从news.php调用脚本,则没有活动事务。
(我的网站更复杂,有更多页面和内容)。
是的,有人能帮帮我吗?谢谢!答案 0 :(得分:1)
最好的办法是模拟嵌套交易。为此,请为数据库访问编写一个包装器。(pseduocode)
class MyMysqli {
protected $realDb;
protected $transaction_count =0;
public function __construct ($host, $username , $passwd, $dbname){
$this->realDb = new Mysqli($host, $username, $passwd, $dbname);
}
public function __get($property){
return $this->realDb->$property;
}
public function __set($property, $value){
return $this->realDb->$property = $value;
}
public function __call($method, $args){
return call_user_func_array(array($this->realDb, $method), $args);
}
// overload begin_transaction, commit and rollback
public function begin_transaction(){
$this->transaction_count++;
if ($this->transaction_count == 1){
$this->realDb->begin_transaction();
}
}
public function commit(){
$this->transaction_count--;
if($this->transaction_count == 0){
$this->realDb->commit();
}
}
public function rollback(){
throw new Exception("Error");
}