Php PDO错误:带有多个查询的prepare()';不能在事务内部工作

Php PDO错误:带有多个查询的prepare()';不能在事务内部工作,php,transactions,pdo,Php,Transactions,Pdo,在搜索前一个问题的解决方案时,我遇到了一个奇怪的事实——带有多个查询的PDO prepare()在事务中无法正常工作。您不会得到任何警告、异常和任何信息—只有静默和提交/回滚 此外,即使除第一个查询外的一些查询包含错误,也不会得到异常。虽然如果第一个查询包含错误,您会得到预期的异常 如果没有交易,一切正常 如果在一个事务中放入多个prepare()语句(每个语句都有一个查询),同样,所有语句都正常工作 我读过MySQL不支持带有多个查询的预处理语句,但问题是PDO默认情况下不处理真正的MySQL

在搜索前一个问题的解决方案时,我遇到了一个奇怪的事实——带有多个查询的PDO prepare()在事务中无法正常工作。您不会得到任何警告、异常和任何信息—只有静默和提交/回滚

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

如果没有交易,一切正常

如果在一个事务中放入多个prepare()语句(每个语句都有一个查询),同样,所有语句都正常工作

我读过MySQL不支持带有多个查询的预处理语句,但问题是PDO默认情况下不处理真正的MySQL预处理语句,只模拟它们

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


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

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

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


刚刚报告了这个bug

这个行为实际上是某些版本上的bug(在PHP5.4.6-Ubuntu和PHP5.4.19-Windows上测试)

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


刚刚报告了错误

“PDO默认情况下不处理真正的MySQL准备的语句,只模拟它们”-不,PDO将参数处理抽象为通用语法。底层数据库引擎(无论是MySQL还是任何其他引擎)必须仍然支持您试图使用的功能。@Tomalak:实际上OP是正确的-PDO模拟prepareds。“基础数据库引擎必须仍然支持您尝试使用的功能”-它会有什么变化?谢谢您的评论。可能我使用的术语不正确,但问题仍然存在-带有多个查询的prepare()在事务中不起作用。在不在交易范围内的情况下有效。是的,没关系。这太挑剔了。“PDO默认情况下不处理真正的MySQL准备的语句,只模拟它们”-不,PDO将参数处理抽象为通用语法。底层数据库引擎(无论是MySQL还是任何其他引擎)必须仍然支持您试图使用的功能。@Tomalak:实际上OP是正确的-PDO模拟prepareds。“基础数据库引擎必须仍然支持您尝试使用的功能”-它会有什么变化?谢谢您的评论。可能我使用的术语不正确,但问题仍然存在-带有多个查询的prepare()在事务中不起作用。在不在交易范围内的情况下有效。是的,没关系。那太挑剔了。