2

我正在实现一个在更新/添加数据库行后触发的基本侦听器(一个civicrm_post挂钩)。我遇到的问题是,即使表中的一行已更改,通过 Joomla 数据库对象加载同一行也会返回先前的值。

假设我将对象的名称从“foo”更改为“bar”。

$db =& JFactory::getDBO();
$db->setQuery("SELECT ...");

返回 '​​foo' 作为名称,而

$c = mysql_connect("host","user","password");
mysql_select_db("db", $c);
$result = mysql_query("SELECT ...");

返回“酒吧”。

是否正在进行任何缓存,有什么方法可以清除它吗?

以供参考:

  • Joomla 2.5.6
  • PHP 5.3.10
  • MySQL 5.1.36

编辑:这是我在 CiviCRM 论坛上开始的一个主题,它提供了更多细节:http: //forum.civicrm.org/index.php/topic,25200.0.html

编辑2:“最新发展”和一些澄清。

我正在使用钩子推送更新的 iCal 提要,这是 CiviCRM 的前端组件提供的提要。当钩子触发时它不会更新,即使数据库在那时更新并且两端都没有缓存。显然 CiviCRM 使用自己的数据库连接器,因此上述措辞不再严格有效。使用稍后触发的钩子(civicrm_postProcess)解决了这个问题,但这是一个“hacky”修复。

4

1 回答 1

0

在我看来,有三种选择:

  1. @SørenBeckJensen 可能是对的!尝试运行:
    select DATABASE() from dual
    并查看每个数据库正在调用哪个数据库。

  2. 另一种选择是autocommit关闭,在这种情况下您需要提交:
    $db->setQuery("COMMIT");

  3. 第三个选项是INSERT没有正确写入(在第一种情况下)并且它失败了。但我需要查看查询才能确定。

于 2012-07-14T19:09:52.367 回答