【问题标题】:MYSQL query running at phpmyadmin but not through mysql_query in ActiveCollabMYSQL 查询在 phpmyadmin 运行,但不是通过 ActiveCollab 中的 mysql_query
【发布时间】:2013-07-03 11:48:42
【问题描述】:

我正在为 ActiveCollab 开发一个模块。直到今天,当我尝试在其中一张表上运行更新命令时,一切正常。这是命令:

UPDATE `acx_credit_card_vault_recurring` SET `status`='1' WHERE `id`='2'

令我不快的是,它不起作用。我尝试了相同的命令,将其复制粘贴到 phpmyadmin SQL 文本框中并运行它没有任何问题。

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

$result = DB::execute("CREATE TABLE IF NOT EXISTS `acx_credit_card_vault_recurring` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`invoice_object_id` int(11) NOT NULL,
`ccv_id` int(11) NOT NULL,
`status` int(4) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=0");

pr($result);

//Then i inserted a few records, again through module script and tried the update once again.

$result2 = DB::execute("INSERT INTO `acx_credit_card_vault_recurring` (`invoice_object_id`, `ccv_id`, `status`) VALUES
(1, 1, 0),
(4, 2, 0)");

pr($result2);

$result3 = DB::execute("UPDATE `acx_credit_card_vault_recurring` SET `status`='1' WHERE `id`='2'");
pr($result3);

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

除此之外,如果我确实同时运行第一个和最后一个语句(CREATE 和 UPDATE),则 UPDATE 工作正常。但是如果单独运行它不起作用。此外,每次我运行它时,它都会返回 true(1),这意味着查询运行“没有错误”但没有更新记录。

这个问题似乎只发生在这个表上,并且 SQL 更新语句在同一数据库的其他表上工作正常。

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

【问题讨论】:

    标签: mysql phpmyadmin


    【解决方案1】:

    activecollab 模块中的自定义查询应按以下格式编写。

    try {
      DB::beginWork();
      // yourstuff
      DB::commit();
    catch (Error $e) {
      DB::rollback();
    }
    

    如果你的东西有任何问题,回滚就会运行。

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

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      我发现了问题。这是

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

      在运行 DB::execute 命令之前调用。由于此操作在系统可以将事务标记为“已完成”之前终止(使用 exit())。它导致系统“回滚”它自己的方法/功能可能对系统所做的最近的数据库更改。为什么 UPDATE 对某些表起作用而不在某些表上起作用仍然是一个谜。无论如何都感谢您观看它!

      【讨论】:

      • 我只是想问你是否发现了 - 太好了,你回来发布答案。在我的最后一次演出中,这让我想了
      猜你喜欢
      • 2010-11-24
      • 2011-10-09
      • 1970-01-01
      • 2017-12-03
      • 2018-03-03
      • 2021-09-06
      • 1970-01-01
      • 2013-03-02
      • 2012-01-06
      相关资源
      最近更新 更多