Выполняю парсинг файла формата CSV и запись инфы из него в БД MySQL.
Использую встроенную функцию fgetcsv.
$rows = array();
$link = fopen(CSV_MAIN, "r");
while ($data = fgetcsv($link, 0, ';', '"') ) {
$rows[] = $data;
}
fclose($link);
Собираю в цикле запрос (что когда-то ещё Игорь_Vasinsky советовал )
$query = "INSERT INTO table_name (
field_1,
field_2,
field_n
) VALUES";
$rowsNum = count($rows);
for($i = 0; $i < $rowsNum; $i++) {
$query .= "(
field_1_val,
field_2_val,
field_n_val
)";
if($i == $rowsNum - 1) {
$query .= ";";
} else {
$query .= ",";
}
}
По окончанию склейки строка запроса весит около 4МБ (в CSV более 19000 строк).
Отправляю его серверу БД и получаю "Allowed memory size ...".
Хотел узнать как вообще по-феншую делается парсинг больших файлов с переносом содержимого в БД MySQL?
Заранее спасибо за ответы!
P.S.: Приятель предложил разбить запрос на части и отправлять по 50-100 строк (внутри цикла - if($i%50) {отправка}). Второй вариант с транзакциями, но это, по-моему, уже какое-то извращение.
_____________
Русскоязычная поддержка Joomla! CMS
Joomla-Support.ru :: user Shurikkan
Skype: Shurikkan