【发布时间】:2014-07-10 09:04:00
【问题描述】:
我有一个关于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 扩展自动取消?要不然是啥?有人可以澄清一下吗?
【问题讨论】:
标签: php mysql mysqli transactions xa