Joomla数据库查询在更新后返回旧值

时间:2012-06-29 14:01:30

标签: php mysql joomla civicrm

我正在实现更新/添加数据库行后触发的基本侦听器(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 ...");

返回'bar'。

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

供参考:

  • 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”修复。

1 个答案:

答案 0 :(得分:0)

我看到它的方式有三种选择:

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

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

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