Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO->beginTransaction()上已存在活动事务错误_Php_Mysql_Cakephp_Pdo_Transactions - Fatal编程技术网

Php PDO->beginTransaction()上已存在活动事务错误

Php PDO->beginTransaction()上已存在活动事务错误,php,mysql,cakephp,pdo,transactions,Php,Mysql,Cakephp,Pdo,Transactions,我有一个基于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): DboSourc

我有一个基于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_连接。最近我们还没有更新CakePHP框架,应用程序代码在环境中也是一样的

Debug告诉我,在脚本执行期间,一行中有2个BEGIN事务调用,但正如官方MySQL文档所说:

事务不能嵌套。这是一个隐含的结果 当您发出启动命令时,对任何当前事务执行提交 事务语句或其同义词之一

所以我想这应该不是一个问题,而且在所有环境中都有相同的2 BEGIN,并且在那里一切正常

有些东西告诉我,如果在4个环境中的3个环境中一切正常,原因是在环境中,但我不知道它可以是什么,谷歌也没有说太多


原因可能是什么,我应该在哪里寻找?

您开始交易两次,这就是原因。为了解决这个问题,请不要这样做。但它是通过框架以隐式方式完成的,并且之前的事务应该根据MySQL文档自动提交。还有一个问题仍然悬而未决——为什么相同的代码可以在其他3个环境中正常工作?这无关紧要——为什么在这个环境中调用了两次?在这种特定情况下,系统会尝试执行DB迁移。整个迁移都打包到事务中,在迁移内部有一个数据保存,而数据保存又开始了事务。但是,我们发现了另一个与相关数据保存相关的案例,存在简单的关联数据保存,但问题相同。问题是,第二种情况也只出现在生产环境中。好吧,db连接替换的代码中有一个缺陷,并且已经启动的事务的异常只出现在生产环境中,因为只有那个连接是持久的。看来我抓到了一只很难对付的虫子,并修复了它!感谢@zerkms的坚持不懈!