我对this
有疑问假设我有几个连接
$conn_site = mysqli_connect("localhost", "us", "ps");
mysqli_select_db("site", $conn_site);
$conn_forum = mysqli_connect("localhost", "us", "ps");
mysqli_select_db("forum", $conn_forum);
并希望在这些连接之间进行交易。由于PHP中的mysqli扩展没有交易支持,我必须像这样手动完成
function begin()
{
@mysqli_query("BEGIN", $conn_site);
@mysqli_query("BEGIN", $conn_forum);
}
function commit()
{
@mysqli_query("COMMIT", $conn_site);
@mysqli_query("COMMIT", $conn_forum);
}
function rollback()
{
@mysqli_query("ROLLBACK", $conn_site);
@mysqli_query("ROLLBACK", $conn_forum);
}
然后使用它
begin();
mysqli_query("insert into users (....)") or rollback();
mysqli_query("insert into forumusers(....)") or rollback();
commit();
因此,由于我手动处理状态,PHP中普通和XA事务之间的区别是什么?如果我在其他连接上启动普通交易,第一个交易将由mysqli扩展自动取消?或者是什么?有人可以澄清一下吗?
答案 0 :(得分:0)
非常简单:如果你在第二个提交声明中失败了,你会怎么做?第一个不能再回滚(它已经提交),因此您的一致性保证被破坏。解决这个问题的正确方法是2PC。这正是XA所提供的。