PHP 不要从 for 循环中在数据库中插入重复项

PHP do no insert duplicates in database from for loop

我查看了一些类似的问题,但找不到解决方案。所以我从 excel table 导入数据。数据包含公司名称、公司唯一编号、城市和地址。

我需要的是检查数据库中是否存在唯一编号,如果存在 - 跳过,如果不存在 - 创建记录。下面是我的代码,它循环遍历行:

for ($i = $data_start_row; $i < $sheetCount + 1; $i++) {
    $externalsales->eik = $spreadSheetAry[$i][$client_eik];
    if ($externalsales->getSocieteByBulstat() > 0) {
        continue;
    } else {
        $importfromexcel->nom = $spreadSheetAry[$i][$client_name];
        $importfromexcel->address = $spreadSheetAry[$i][$client_address];
        $importfromexcel->town = $spreadSheetAry[$i][$client_city];
        $importfromexcel->tva_intra = $spreadSheetAry[$i][$client_eik];
        $importfromexcel->userId = $user->id;
        $importfromexcel->insertSocieteRecord();
    }
}

问题是,有时文件中有不止一行,缺少记录的数据相同,因此在数据库中创建了重复项。我怎样才能避免这种情况?

尝试使用 goto start;,其中 start: 在 for 循环之前,但这不起作用(第一个丢失记录的记录束像 +500 个重复一样插入)。

将其中一列设置为唯一是我最后的选择,但我更喜欢在脚本中进行。

因此,对于偶然发现这里的任何人,我的最终解决方案如下:

由于数据库的某些限制,我无法为目标 table societe 中的字段 tva_intra 设置唯一索引,所以我切换到 2 步处理

第一步: 我创建了自定义 table societe_temp,具有与问题中描述的相同字段,为此 table我能够为字段 tva_intra:

设置唯一索引
`ALTER TABLE societe_temp ADD UNIQUE idx_societe_temp_tva_intra (tva_intra);`

然后将 excel 文件中的记录插入到此 table 中,从而避免任何重复记录。

第二步从temptablesociete_temp获取记录并插入mastertable'societe'

我知道这不是最佳解决方案,但它是一种可以在某一天帮助某人的解决方法。