4

次のようなループがある場合:

foreach(...) {
  $r1 = $zend_db->fetchRow("SELECT ... ");
  $zend_table->insert($data_array, $where);
}

... 数千回実行しています。$r1前のループで挿入されたレコードが含まれていない可能性はありますか?

http://dev.mysql.com/doc/refman/5.1/en/query-cache.htmlで、「クエリ キャッシュは古いデータを返しません。テーブルが変更されると、クエリ キャッシュ内の関連するエントリがフラッシュされます。 ." しかし、ZEND は SELECT や INSERT に対して予期しないキャッシュを行うのではないでしょうか?

これを解決するためにトランザクションを使用する必要がありますか?

二重記録に問題がありましたが、それがどこから来たのか他に説明がありません。しかし、2 か月前に存在しない csv データをインポートしたため、再現できません。

4

1 に答える 1

1

コメントで draw010 が述べたように、Zend_Db は自分で実装しない限りキャッシュしません。次回、問題を確認するために、次のようなことを試してください

 try {
          foreach(...) {
      $r1 = $zend_db->fetchRow("SELECT ... ");
      $zend_table->insert($data_array, $where);
                       }
        } catch(Zend_Db_Exception $e)
            {

                $logger->log($e->getMessage(),Zend_Log::CRIT); //$logger is instance of Zend_Log
            }
于 2012-04-19T04:28:39.307 に答える