ограничение с массовой вставкой CSV в MySQL

0

У меня есть функциональность с загрузкой файлов csv. Функциональность работает, если csv имеет около 30 тыс. Строк. Но всякий раз, когда у csv файла будет более 30 тыс. Строк, объемная вставка не работает. Ниже приведен мой код для чтения csv и вставки в таблицу.

$csvfile = fopen($file, 'r');
$i = 0;
$data4 = "";
while (!feof($csvfile))
{
    $csv_data[] = fgets($csvfile, 1024);
    $csv_array = explode(";", $csv_data[$i]);
    $data4.= "('".$csv_array[2]."', '".$csv_array[4]."', '".$csv_array[0]."','".$csv_array[1]."'),";  
}
$i++;
fclose($csvfile);
$data4 = substr($data4,0,-1);
$sql = "INSERT INTO csv_table('column1','column2','column3','column4') VALUES $data4"; 
mysqli_query($mysqliConn,$sql);

Только у меня проблема, когда у меня есть записи более 30 тыс. Пожалуйста, предложите мне изменения здесь. заранее спасибо

Теги:
csv

1 ответ

1

Pro tip: "Не работает", конечно, может означать что угодно: "мой сервер загорелся, и мой центр обработки данных сгорел дотла", "чтобы все мои значения были изменены на 42 ", чтобы "операция не имела эффекта". Поймите свои ошибки. Проверьте ошибки, возвращаемые из операций, таких как mysqli_query().

Что, как говорится...

Вы заполняете все содержимое файла CSV и помещаете его в одну текстовую строку. Вероятно, этот метод падает, если файл csv слишком длинный.

Существует ограничение на длину запроса MySQL. Он большой, но не бесконечный, и он задается как параметром сервера, так и конфигурацией сервера. Прочитай это. https://dev.mysql.com/doc/refman/5.7/en/packet-too-large.html

У php также может закончиться память.

Как исправить? Обработайте файл CSV не сразу, а в кусках по пятьдесят строк или около того. После того, как вы прочтете пятьдесят строк, сделайте вставку.

Pro tip 2: Sanitize ваши входные данные. Что произойдет с вашей таблицей, если кто-то помещает такую строку в загруженный CSV файл?

"bwahahahaha!'; -- DROP TABLE csv_table;", "something", "somethingelse"

Возможно, все в порядке. Но вы хотите рискнуть таким образом?

Имейте в виду, что общедоступная сеть сканирует киберпреступников, и кто-то будет обнаруживать и использовать эту уязвимость в днях, если вы ее оставите.

  • 0
    одна внутренняя система будет генерировать этот CSV, так что этого не произойдет.
  • 0
    с уважением, это будут знаменитые последние слова @ user3408779.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню