2016-04-29 4 views
0

У меня есть большой текстовый файл (40Mb), который содержит несколько строк, файл выглядит так:Как разобрать и вставить данные в базу данных

AN,Aixas|AN,Aixirivall|AN,Aixovall|AN,Andorra la Vella|AN,Ansalonga|AN,Anyos|AN,Arans| 

У меня есть ключ (две буквы) и значение (город), поэтому у меня проблема, когда я пытаюсь разбить его на PHP с помощью этой функции, и когда я пытаюсь вставить данные в свою базу данных.

Функция, которую я использую в РНР:

$file = explode("|", file_get_contents('city.txt')); 
$city = explode(",", $file); 

foreach ($city as $key => $value) 
mysqli_query($mysqli, "INSERT INTO city(name_city, id_city) VALUES ('$key', '$value')"); 

произошла ошибка:

[29-Apr-2016 14:33:09 Europe/Berlin] PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 32 bytes) in /home/mypath on line 6 

Я думаю, что мой файл более велик, чтобы быть обработаны, как я могу разобрать и вставить мой данные в моем db?

+2

Использование LOAD DATA INFILE http://dev.mysql.com/doc/refman/5.7/en/load-data.html –

+0

Или вы можете создать файл со вставкой данных https://dev.mysql.com/doc /refman/5.7/en/mysql-batch-commands.html – Iwan

ответ

0

Я бы порекомендовал вам использовать MySQL INFILE загрузки данных:

LOAD DATA LOCAL INFILE '".$file_path."' INTO TABLE your_table 
       FIELDS TERMINATED BY '|' 
       LINES TERMINATED BY '\n' 
       IGNORE n LINES"; 

Где $file_path это путь текстового файла, your_table это имя таблицы и n это количество строк вы хотите игнорировать с самого начала текстового файла.

Смежные вопросы