在phpmyadmin上运行的MYSQL查询,但不是通过ActiveCollab中的MYSQL\u查询

在phpmyadmin上运行的MYSQL查询,但不是通过ActiveCollab中的MYSQL\u查询,mysql,phpmyadmin,Mysql,Phpmyadmin,我正在为ActiveCollab开发一个模块。直到今天,当我尝试在其中一个表上运行update命令时,一切都正常。命令如下: UPDATE `acx_credit_card_vault_recurring` SET `status`='1' WHERE `id`='2' 令我不快的是,它没有起作用。我尝试了同样的命令,将其复制粘贴到phpmyadmin SQL文本框中,并毫无问题地运行了它 我完全删除了该表,并通过脚本创建了它,以确保没有与权限相关的问题(?): 上述所有pr(print_r)

我正在为ActiveCollab开发一个模块。直到今天,当我尝试在其中一个表上运行update命令时,一切都正常。命令如下:

UPDATE `acx_credit_card_vault_recurring` SET `status`='1' WHERE `id`='2'
令我不快的是,它没有起作用。我尝试了同样的命令,将其复制粘贴到phpmyadmin SQL文本框中,并毫无问题地运行了它

我完全删除了该表,并通过脚本创建了它,以确保没有与权限相关的问题(?):

上述所有pr(print_r)函数打印1(true)和表格都是一次性成功创建、填充和更新的。现在,我注释掉了CREATE和INSERT代码块,并单独运行UPDATE语句,但令我不快的是,它再次无法工作

除此之外,如果我同时运行first和last语句(CREATE&UPDATE),那么更新工作正常。但如果单独运行,则不起作用。而且,每次运行它时,它都返回true(1),这意味着查询运行时“没有错误”,但没有更新任何记录

这个问题似乎只发生在这个表上,SQL update语句可以在同一数据库的其他表上正常工作


我可以看到很多用户在这里提出同样的问题,但我找不到满意的答案。大多数答案建议检查语法、单引号、胡萝卜等,我认为这不是问题。

我发现了问题。是的

DB::beginWork('Deleting recurring profile from Credit Card Vault @ ' . __CLASS__); 

在运行DB::execute命令之前调用。由于此操作在系统标记事务“已完成”之前终止(使用exit())。这导致系统“回滚”它自己的方法/函数可能对系统所做的最新DB更改。为什么更新对某些表有效,而对某些表无效,这仍然是个谜。不管怎样,谢谢你的关注

activecollab模块内的自定义查询应采用以下格式编写

try {
  DB::beginWork();
  // yourstuff
  DB::commit();
catch (Error $e) {
  DB::rollback();
}
如果你的东西出了问题,回滚将运行

此外,所有未提交的事务都会在脚本关闭时自动回滚,因此您需要确保正在提交您打开的事务


希望这能有所帮助。

我只是想问你是否发现了这一点——很好,你回来发布了答案。在我最后一次演唱会上,这让我好几天都没想到。
try {
  DB::beginWork();
  // yourstuff
  DB::commit();
catch (Error $e) {
  DB::rollback();
}