类似的问题已被多次询问,但我已经完成了它们并且找不到解决方案。
我正在尝试将包含大约500个订单的简单CSV文件导入到我的数据库表中。我正在使用如下所示的交易。
$dbAdapter->beginTransaction();
$file = new SplFileObject($fileName, 'r');
while(!$file->eof()){
try{
$order = $file->fgetcsv();
if(!$this->orderExists($order)){
$this->saveOrder($order);
}
} catch (Exception $ex) {
$dbAdapter->rollBack();
throw new Om_Model_Exception($ex->getMessage());
}
}
$dbAdapter->commit();
这很好用。但是同一个CSV文件可能有重复的订单,我需要跳过它们。为了在插入订单之前执行此操作,我正在检查数据库表以查看订单是否存在,但由于事务仍在运行,因此总是返回false。
所以我的问题是,有没有办法在提交事务之前检查插入的记录? (可能是MySQL将数据存储到临时表中,我可以查询)。
我可以通过将订单存储到数组中并检查数组是否有重复来解决这个问题,但这似乎浪费了大量内存。如果订单文件很大,可能无法正常工作。
感谢您的帮助。