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

时间:2013-07-05 11:25:30

标签: mysql phpmyadmin

我正在为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(真)并且表格已成功创建,填充和更新,一次完成。现在我注释掉了CREATE和INSERT代码块并单独运行UPDATE语句,再次让我不愉快的惊喜它再次无效!

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

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

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

2 个答案:

答案 0 :(得分:2)

我发现了这个问题。它是

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

在运行DB :: execute命令之前调用。由于此操作在系统标记事务“已完成”之前终止(使用exit())。它导致系统“回滚”最近的数据库更改,它自己的方法/功能可能对系统进行了更改。为什么UPDATE在某些表上工作而不是在某些表上工作仍然是个谜。不管怎样,谢谢你看看它!

答案 1 :(得分:0)

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

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

如果yourstuff出现任何问题,则会回滚。

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

希望这有帮助。