MySQL查询在NaviCat中有效但在SugarCRM

时间:2016-06-02 14:00:58

标签: php mysql sql-update sugarcrm navicat

如果需要任何有助于您解决问题的其他信息,请与我们联系。

我正在运行SugarCRM 6.5.20 CE

我有一个为自定义模块触发的逻辑钩子,当我去检查日志时,查询显示执行时间并且看起来运行得很好,但数据库实际上并没有更新。

我从sugarcrm.log文件中取出了同样的查询,然后在Navicat中运行了查询,并且......它没有问题地更新了。

我已经尝试了

  • 围绕列/表名称的部分/无/所有反引号
  • 确保我没有使用任何保留字

所以在这一点上,我想要将其归结为MySQL版本问题。我正在运行MySQL 5.5.49-cll。

UPDATE `my_database`.`p_policies_cstm`
LEFT OUTER JOIN r_raises_p_policies_1_c ON p_policies_cstm.id_c = r_raises_p_policies_1_c.r_raises_p_policies_1p_policies_idb
LEFT OUTER JOIN r_raises_cstm ON r_raises_cstm.id_c = r_raises_p_policies_1_c.r_raises_p_policies_1r_raises_ida
SET factor_c = '1.00', client_ppp_c = '1,529,987.76'
WHERE r_raises_p_policies_1_c.r_raises_p_policies_1p_policies_idb = 'e1570120-56e0-5d75-8ab7-574f2ef83a5b'

有人可能会帮助想一想为什么它不会引发错误而不会实际更新数据库?

这里也是它触发的日志文件:

Wed Jun  1 20:30:06 2016 [26589][1][INFO] Query:UPDATE my_database.p_policies_cstm
            LEFT OUTER JOIN r_raises_p_policies_1_c ON p_policies_cstm.id_c = r_raises_p_policies_1_c.r_raises_p_policies_1p_policies_idb
            LEFT OUTER JOIN r_raises_cstm ON r_raises_cstm.id_c = r_raises_p_policies_1_c.r_raises_p_policies_1r_raises_ida
            SET factor_c = '1.00', client_ppp_c = '1,529,987.76'
            WHERE r_raises_p_policies_1_c.r_raises_p_policies_1p_policies_idb = 'e1570120-56e0-5d75-8ab7-574f2ef83a5b'
Wed Jun  1 20:30:06 2016 [26589][1][INFO] Query Execution Time:0.000363111495972
Wed Jun  1 20:30:06 2016 [26589][1][INFO] Get One: |SELECT id_c FROM p_policies_cstm WHERE id_c = 'e1570120-56e0-5d75-8ab7-574f2ef83a5b'|
Wed Jun  1 20:30:06 2016 [26589][1][DEBUG] Limit Query:SELECT id_c FROM p_policies_cstm WHERE id_c = 'e1570120-56e0-5d75-8ab7-574f2ef83a5b' Start: 0 count: 1
Wed Jun  1 20:30:06 2016 [26589][1][INFO] Query:SELECT id_c FROM p_policies_cstm WHERE id_c = 'e1570120-56e0-5d75-8ab7-574f2ef83a5b' LIMIT 0,1
Wed Jun  1 20:30:06 2016 [26589][1][INFO] Query Execution Time:0.000181913375854

1 个答案:

答案 0 :(得分:0)

我之前的回答出现了,但实际上并没有起作用。

真正的解决方案与使用after_save逻辑钩子相比,而不是使用before_save逻辑钩子。

我不知道的是,在before_save逻辑挂钩中,当你触发一个SQL查询时,它又回过头来再次发出一个更新语句,但这次是空白值我在哪里我试图更新价值。

将此更改为after_save会立即解决问题。