Я пытаюсь создать функцию в моей системе управления контентом, в которой пользователи могут загружать CSV-файл, который затем анализируется, и данные помещаются в базу данных MySQL. Для этого я использую ввод файла и этот SQL-запрос.
$sql = "LOAD DATA LOCAL INFILE '".$_FILES["file"]["tmp_name"]."' INTO TABLE persons FIELDS TERMINATED BY ';' LINES TERMINATED BY '\r' (id, name, email, contacts)";
Это отлично работает для .csv
файла, который я создал на моем компьютере, но не у всех CSV-файлов есть поля, которые заканчиваются точкой с запятой и имеют строки, которые заканчиваются символом \r
. Теперь я хочу, чтобы этот запрос работал для всех .csv
файлов. В противном случае эта функция не будет работать достаточно хорошо, чтобы ее реализовать в моей CMS. Есть ли способ сделать эту работу для файлов .csv
которые имеют другие поля и окончания строк? (например, \ n, \ r \ n,,)
Попробуйте LINES TERMINATED BY '\r\n'
Это будет работать для файлов, заканчивающих строки с помощью '\ r \ n', но также с '\ r' и '\ n'. Из документов MySQL:
ПЛАНИРОВАННЫЕ ПОЛЯМИ, ЗАПУСКАМИ ЛИНИЙ И ЛИНИЯМИ, ПРЕКРАЩЕННЫМИ значениями, могут быть более одного символа. Например, для записи строк, которые завершаются парами возврата каретки / перевода строки или для чтения файла, содержащего такие строки, укажите предложение LINES TERMINATED BY '\ r \ n'.
[EDITED]
Вам также необходимо добавить \r\n
к предложению FIELDS TERMINATED BY
, чтобы сообщить парсеру не включать символы конца строки в последнее поле первой строки. Так
FIELDS TERMINATED BY ';, \t\r\n'
будет работать в большинстве случаев.