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 做一些意想不到的缓存?

我需要使用事务来解决这个问题吗?

我遇到了双重记录的问题,并且没有其他解释它们来自哪里。但我无法重现它,因为它发生在两个月前,导入了不再存在的 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 回答