我有3个关于PDO和Transactions的查询。 我在交易中很新颖,所以请理解我的误解!PDO MySQL交易
首先,我将解释一下情况: 我创建了一个单例模式的PDO包装,它使用innoDB表访问MySQL数据库。我创建包装的原因是提供额外的功能并提高可移植性。
每次对象需要访问数据库时,它都会检索相同的连接。
我的问题如下:
1)我明白,如果我开始一个事务与PDO::beginTransaction()
,那么将MySQLs自动提交模式关闭。但是,这是否影响到当前用户与数据库或每个访问者连接的连接,因为它包含自动提交值的数据库,而不是PHP脚本?
2)我需要执行与实际事务无关的MySQL查询。这些查询在不相关的对象中执行,但仍使用与事务相同的MySQL连接。 我刚刚发现与事务无关的(对于事务)查询仍然包含在事务中,这导致了不希望的影响。有没有办法解决?或者是我的PHP设计对于这种交易的使用是不正确的?
3)我正在使用PHP 5.1。它支持以下功能:PDO::beginTransaction()
,PDO::commit()
和PDO::rollBack()
。
据我所知,如果我打电话PDO::rollBack()
,当一个事务没有生效时,抛出一个PDOException。解决方法是在使用rollBack()之前使用PDO::inTransaction()
来检查事务,但是直到5.3之前,这不会被添加到PHP。
目前,当我的包装器启动一个事务时,它将一个静态变量更新为true,当它回滚或提交时,它将该变量设置为false。这是一个好的解决方案吗?或者有没有我不知道的预先存在的解决方案?
非常感谢您的帮助,每个连接
为什么你在交易中运行不相关的查询?有什么理由这样做? –
从技术上讲,不是无关的查询。例如,如果这是一个非严重错误,我想将错误保存到数据库,但在开始查询之前继续或从另一个表中检索权限。 –
“我想将错误保存到数据库” - ouch !文本记录错误,而不是数据库。在运行事务之前必须检索权限。这就是全部 –