PDO错误:带有多个查询的prepare()没有';不要在交易中工作


PDO bug: prepare() with multi-queries doesn't work inside a transaction

在搜索上一个问题的解决方案时,我遇到了一个奇怪的事实——带有多个查询的PDO prepare()在事务中无法正常工作。你没有得到任何警告,没有异常,什么都没有——只是沉默,没有提交/回滚。

此外,即使除第一个查询外的某些查询包含错误,也不会出现异常。尽管如果第一个查询包含错误,您会得到预期的异常。

如果没有交易,一切都很好。

如果在一个事务中放入多个prepare()语句(每个语句都有一个查询),那么一切都会正常工作。

我读到MySQL不支持多查询的准备语句,但问题是PDO默认情况下不处理真正的MySQL准备语句,只模拟它们。

我花了一整天的时间试图找到一些描述这个问题的文档,但我失败了。

有人知道这是否真的是PDO错误吗?

这种行为实际上在某些版本上是一个错误(在PHP 5.4.6-Ubuntu和PHP 5.4.19-Windows上测试)

关于这个问题没有(很容易找到)文档,唯一的解决方法是使用多个准备好的语句。

刚刚报告了错误https://bugs.php.net/bug.php?id=65994