【问题标题】:PDO beginTransaction in two separate scriptsPDO beginTransaction 在两个单独的脚本中
【发布时间】:2023-04-01 05:04:01
【问题描述】:

当两个不同的客户端调用同一个具有 pdo::beginTransaction 的 php 函数时会发生什么?

其中一个失败还是两个 php 实例可以执行 beginTranscation 提交块的内容?

IE:

try{
db::beginTransaction();
//queries here
//can two separate php instances go in here at the same time?
db:commit();
}
catch(error e)
{
 db::rollback();
}

【问题讨论】:

  • 这取决于您使用的数据库,但通常每个连接都会处理事务,所有现代数据库都支持多个连接,每个连接都有事务。

标签: php mysql pdo


【解决方案1】:

PHP 脚本的每个实例(更准确地说,是 PDO 的每个实例)都会打开一个与数据库的连接(从 DB 的角度来看,是一个新会话)。后端数据库(除了少数平面文件)支持多个连接,但最终会以不同的方式锁定它们的各个资源。根据您的事务中执行的查询,您最终可能会导致死锁。也就是说,同时打开多个数据库连接并不一定会让您陷入死锁情况。

【讨论】:

  • 但是如果两个文件都包含在一个包含包含的页面上,那么它不是多个脚本,所以你应该只有一个可以传递的数据库连接吗?
  • 取决于您是否使用相同的 PDO 实例。虽然您可以在 PHP 脚本的生命周期内与同一个数据库建立多个连接,但除非您有特定原因,否则不建议这样做。最佳实践是每个 PHP 请求使用单个连接。
  • 每个脚本我只使用一个 PDO 对象,并且只在脚本开头建立连接并在结尾终止它。
猜你喜欢
  • 2019-03-01
  • 2013-11-20
  • 1970-01-01
  • 2021-03-29
  • 1970-01-01
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多