Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 什么';普通事务和XA事务之间的区别是什么?_Php_Mysql_Mysqli_Transactions_Xa - Fatal编程技术网

Php 什么';普通事务和XA事务之间的区别是什么?

Php 什么';普通事务和XA事务之间的区别是什么?,php,mysql,mysqli,transactions,xa,Php,Mysql,Mysqli,Transactions,Xa,我有一个问题 假设我有一些联系 $conn_site=mysqli_connect(“localhost”、“us”、“ps”); mysqli_select_db(“site”,$conn_site); $conn_forum=mysqli_connect(“本地主机”、“美国”、“ps”); mysqli_select_db(“论坛”,$conn_论坛); 并希望在这些连接之间进行事务处理。由于PHP中的mysqli扩展没有事务支持,所以我必须像这样手动执行 函数begin() { @my

我有一个问题

假设我有一些联系

$conn_site=mysqli_connect(“localhost”、“us”、“ps”);
mysqli_select_db(“site”,$conn_site);
$conn_forum=mysqli_connect(“本地主机”、“美国”、“ps”);
mysqli_select_db(“论坛”,$conn_论坛);
并希望在这些连接之间进行事务处理。由于PHP中的mysqli扩展没有事务支持,所以我必须像这样手动执行

函数begin()
{
@mysqli_查询(BEGIN,$conn_站点);
@mysqli_查询(“BEGIN”,$conn_论坛);
}
函数commit()
{
@mysqli_查询(“提交”,$conn_站点);
@mysqli_查询(“提交”,$conn_论坛);
}
函数回滚()
{
@mysqli_查询(“回滚”,$conn_站点);
@mysqli_查询(“回滚”,$conn_论坛);
}
然后使用它

begin();
mysqli_查询(“插入到用户(..)”或回滚();
mysqli_查询(“插入到forumusers(..)”或回滚();
提交();

既然我手动处理状态,那么PHP中的普通事务和XA事务有什么区别?如果我在其他连接上启动一个普通事务,第一个连接中的事务将被mysqli扩展自动取消?还是怎样有人能澄清这一点吗?

非常简单:如果第二个commit语句失败,您会怎么做?第一个不能再回滚(它已经提交),因此您的一致性保证被破坏。解决此问题的正确方法是2PC。这正是XA所提供的。

2PC是查询
XA准备
到2个连接+查询
XA提交
仍然到2个连接。因此,如果第二次提交失败,我如何回滚第一次提交的?