我有一个基于CakePHP构建的应用程序。有4个应用程序环境 - 本地,测试,验收和生产。 突然只有其中一个(当然是它的生产)我开始遇到交易问题。 我得到的错误是:
There is already an active transaction
#0 /.../lib/Cake/Model/Datasource/DboSource.php(2294): PDO->beginTransaction()
#1 /.../lib/Cake/Model/Model.php(1749): DboSource->begin()
#2 /.../app/Model/AppModel.php(499): Model->save(Array, true, Array)
.....
MySQL版本和设置似乎在所有环境中都是相同的,可能是 max_connections 的唯一区别。最近我们还没有CakePHP框架更新,并且应用程序代码在环境中是相同的。
Debug告诉我在脚本执行期间连续调用了2个BEGIN事务,但正如官方MySQL文档所说:
无法嵌套交易。这是隐含的结果 发出START时对任何当前事务执行的提交 TRANSACTION语句或其中一个同义词。
所以我认为它应该不是问题,而且在所有环境中都有相同的2 BEGIN,并且一切都在那里工作正常。
有些东西告诉我,如果4个环境中有3个环境一切正常,原因就在环境中,但我不知道它可能是什么,谷歌并没有多说什么。
我应该寻找的原因是什么?