我有 3 个关于 PDO 和事务的查询。我对交易很陌生,所以请理解我的误解!
首先,我将解释一下情况:我以单例模式创建了一个 PDO 包装器,它访问带有 innoDB 表的 MySQL 数据库。我创建包装器的原因是提供额外的功能并提高可移植性。
每次对象需要访问数据库时,它都会检索相同的连接。
我的问题如下:
1)我知道如果我开始一个事务PDO::beginTransaction()
,那么这会将 MySQL 的自动提交模式设置为关闭。然而,这是否只影响当前用户与数据库的连接,或每个访问者连接,因为它的数据库包含自动提交值,而不是 PHP 脚本?
2) 我需要执行与实际事务无关的 MySQL 查询。这些查询在不相关的对象中执行,但仍使用与事务相同的 MySQL 连接。我刚刚发现不相关的(与交易)查询仍包含在交易中,这会导致不良影响。有没有办法解决?还是我的 PHP 设计不适合这种事务使用?
3) 我正在使用 PHP 5.1。它支持以下功能PDO::beginTransaction()
:PDO::commit()
和PDO::rollBack()
。
我知道,如果我调用PDO::rollBack()
,当事务无效时,会抛出 PDOException 。解决方案是PDO::inTransaction()
在使用 rollBack() 之前检查事务,但是直到 5.3 才添加到 PHP 中。
目前,当我的包装器启动事务时,它会将静态变量更新为 true,当它回滚或提交时,它会将变量设置回 false。这是一个好的解决方案吗?还是有我不知道的预先存在的解决方案?
非常感谢您的帮助