gpt4 book ai didi

PHP |数据库 |不同数据库上的嵌套 PDO::beginTransition() 和 PDO::commit()

转载 作者:行者123 更新时间:2023-11-29 06:26:46 26 4
gpt4 key购买 nike

我面临一个疑问:如果我以嵌套方式禁用到 2 个不同数据库的 2 个不同连接的自动提交,会发生什么情况?

示例代码:

 $conn = new MainDB(); // DB class
$conn_second = new NotMainDB(); // another DB class

try {

$conn->dbh->beginTransaction(); // disable autocommit
$conn_second->dbh->beginTransaction(); // disable autocommit on 2nd DB

$run = $conn->dbh->prepare(/* UPDATE STATEMENT */);
$run->execute();

$run = $conn->dbh->prepare(/* ANOTHER UPDATE STATEMENT */);
$run->execute();

$ssp = $conn_second->dbh->prepare(/* AN INSERT STATEMENT ON ANOTHER DB */);
$ssp->execute();

$conn_second->dbh->commit();
$conn->dbh->commit();
} catch (Exception $ex) {

$conn->dbh->rollBack();
$conn_second->dbh->rollBack();
}

有什么需要我处理的吗?有没有人经历过这样的情况?

谢谢

最佳答案

即使两个连接都引用同一个数据库,这也应该有效。

这样想:当您正常设置 Apache 并且两个用户同时访问您的站点时,他们同时打开事务,并且没有任何问题。

基本上,数据库一次处理多个连接是完全正常的状态。

不过要确保不要造成任何死锁。当 A 等待 B 完成,而 B 等待 A 完成时,就会发生死锁。我想这可能会发生,例如当您使用具有循环依赖性的触发器时。不过,这些情况相当罕见,尤其是对于 PHP,而且死锁通常发生在用户应用程序级别而不是数据库级别。

关于PHP |数据库 |不同数据库上的嵌套 PDO::beginTransition() 和 PDO::commit(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30501293/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com