$XA=uniqid("");$db->query("XASTART'$XA'");$db1->query("XASTART'$XA'");$insert1="insertintomytablevalues(?,?,?,?,?)";$params=array(12345678,123456789,444,555,1);$db->inser...
$XA = uniqid("");
$db -> query("XA START '$XA'");
$db1 -> query("XA START '$XA'");
$insert1 = "insert into mytable values(?,?,?,?,?)";
$params = array(12345678,123456789,444,555,1);
$db -> insert($insert1,$params);
$db1 -> insert($insert2,$params);
$db -> query("XA END '$XA'");
$db -> query("XA PREPARE '$XA'");
$db1 -> query("XA END '$XA'");
$db1 -> query("XA PREPARE '$XA'");
try{
$db -> query("XA COMMIT '$XA'");
throw new Exception("exception");
$db1 -> query("XA COMMIT '$XA'");
}catch(Exception $e){
$db -> query("XA ROLLBACK '$XA'");
$db1 -> query("XA ROLLBACK '$XA'");
}
代码如上,$db和$db1连接了两个主机上的mysql:
服务会报错XAER_RMFAIL: The command cannot be executed when global transaction is in the NON-EXISTING state
而且查看数据库,$db数据插入成功了,$db没成功。没有起到分布式事务的作用。
如何确保分布式事务都能回滚?
展开