我正在实现更新/添加数据库行后触发的基本侦听器(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'。
是否有任何缓存正在进行中,有什么方法可以清除它吗?
供参考:
编辑:这是我在CiviCRM论坛上开始的一个主题,它提供了更多细节:http://forum.civicrm.org/index.php/topic,25200.0.html
编辑2:“最新发展”和一些澄清。
我正在使用钩子推出更新的iCal供稿,这是由CiviCRM的前端组件提供的供稿。钩子触发时它不会更新,即使数据库在那时更新并且两端都没有缓存。显然CiviCRM使用自己的数据库连接器,因此上述措辞不再严格有效。使用稍后触发的钩子(civicrm_postProcess)解决了这个问题,但这是一个“hacky”修复。
答案 0 :(得分:0)
我看到它的方式有三种选择:
@SørenBeckJensen可能是对的!尝试运行:
select DATABASE() from dual
查看每个人正在调用哪个数据库。
另一种选择是关闭autocommit
,在这种情况下你需要提交:
$db->setQuery("COMMIT");
第三个选项是INSERT
未正确写入(在第一种情况下)并且失败。但我需要查看查询才能确定。