2

DB 行が更新/追加された後にトリガーされる基本的なリスナー ( 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 ...");

「バー」を返します。

キャッシングが行われていますか?それを消去する方法はありますか?

参考のため:

  • ジュムラ 2.5.6
  • PHP 5.3.10
  • MySQL 5.1.36

編集: これは、CiviCRM フォーラムで開始したトピックで、詳細を提供しています: http://forum.civicrm.org/index.php/topic,25200.0.html

編集2:「最新の開発」といくつかの説明。

私はフックを使用して、CiviCRM のフロントエンド コンポーネントによって提供されるフィードである、更新された iCal フィードをプッシュしています。データベースがその時点で更新され、どちらの側にもキャッシュがない場合でも、フックがトリガーされたときに更新されません。どうやら CiviCRM は独自のデータベース コネクタを使用しているため、上記の文言はもはや厳密には有効ではありません。少し後でトリガーするフック (civicrm_postProcess) を使用すると問題は解決しましたが、これは「ハッキーな」修正です。

4

1 に答える 1

0

私の見方では、次の 3 つのオプションがあります。

  1. @SørenBeckJensenはおそらく正しいです!実行してみてください:
    select DATABASE() from dual
    そして、それぞれによってどの DB が呼び出されているかを確認します。

  2. 別のオプションはautocommitオフにすることです。その場合、コミットする必要があります。
    $db->setQuery("COMMIT");

  3. 3 番目のオプションは、INSERT(最初のケースで) が正しく記述されておらず、失敗することです。しかし、確認するためにクエリを確認する必要があります。

于 2012-07-14T19:09:52.367 に答える