【发布时间】:2012-03-25 18:31:15
【问题描述】:
在寻找我上一个问题的解决方案时,我遇到了一个奇怪的事实 - 带有多查询的 PDO prepare() 在事务中无法正常工作。你没有收到任何警告,没有例外,什么都没有——只是沉默,没有提交/回滚。
此外,即使除了第一个查询之外的某些查询包含错误,您也不会出现异常。虽然如果第一个查询包含错误,您会得到预期的异常。
如果没有交易,一切正常。
如果您将多个 prepare() 语句(每个语句都有一个查询)放在一个事务中 - 再次,一切正常。
我读到 MySQL 不支持多查询的预处理语句,但问题是 PDO 默认情况下不处理真正的 MySQL 预处理语句,只模拟它们。
我花了一整天的时间试图找到一些描述这个问题的文档,但我失败了。
有人知道这是否真的是一个 PDO 错误吗?
【问题讨论】:
-
“PDO 默认不处理真正的 MySQL 预处理语句,只模拟它们” - 不,PDO abstracts 参数处理成通用语法.底层数据库引擎(无论是 MySQL 还是任何其他引擎)仍必须支持您尝试使用的功能。
-
@Tomalak:实际上 OP 是正确的 - PDO 模拟prepared。 “底层数据库引擎必须仍然支持您尝试使用的功能”——它会改变什么?
-
感谢您的评论。可能是我使用的术语不正确,但问题仍然存在 - 带有多查询的 prepare() 在事务中不起作用。并且在不在事务中时工作。
-
是的,没关系。这太挑剔了。
标签: php transactions pdo