Я пишу плагин WordPress, который импортирует записи из загруженного файла CSV. Как это должно работать:
Выбрать файл с диска;
Нажать кнопку загрузки;
Скриптпросмотреть файл и вставить записи (столбец postcode
уникален), когда postcode
существует, другие поля обновляются.
Теперь некоторый код (упрощенный для этого вопроса):
///...
$handle = fopen($file, "r");
while( ($row = fgetcsv($handle)) !== FALSE ){
$searcher->wpdb->insert( $searcher->wpdb->prefix . "searcher_postcodes", array(
"name" => $row[1],
"postcode" => $row[0],
"state" => $row[2],
"state_short" => $row[3],
"city" => $row[4],
"lat" => $row[5],
"lng" => $row[6]
) );
echo "<br><code>" . $searcher->wpdb->last_query . "</code>";
if( $searcher->wpdb->insert_id > 0 ){
$imported++;
echo "success";
}else{
echo "failure";
}
}
И почти все нормально, но однажды на нескольких записях я получил:
Импорт 16348
INSERT INTO wp_searcher_postcodes (name, postcode, state, state_short, city, lat, lng) VALUES ('Marienwerder', '16348', 'Brandenburg', 'BB', 'Barnim', '52.85', '13.6')
успех
Импорт 16352
INSERT INTO wp_searcher_postcodes (name, postcode, state, state_short, city, lat, lng) VALUES ('Marienwerder', '16348', 'Brandenburg', 'BB', 'Barnim', '52.85', '13.6')
ошибка
Во втором запросе у меня есть данные из предыдущего запроса, и это ошибка. Так что не каждый. Есть ли способ поставить в очередь или в буфер или что-то в этом роде в каждом запросе в wpdb?