#php #mysql #csv
#php #mysql #csv
Вопрос:
Я импортирую более 4000 файлов CSV в MySQL. Код, который я использую, отлично работает примерно для первых 2 750 файлов CSV — данные вставляются в MySQL просто отлично. Однако после этих первых 2750 файлов данные не вставляются в MySQL, хотя (а) формат / тип данных в CSV не изменился (б) MySQL показывает успешную вставку данных, ошибок нет. Что происходит? Может ли это быть связано с размером базы данных — она составляет около 180 ГБ после 2750 вставок CSV. Соответствующий код приведен ниже.
$query = "LOAD DATA LOCAL INFILE '$csvfilelocation' INTO TABLE xxx FIELDS TERMINATED BY ',' LINES TERMINATED BY 'n' IGNORE 1 LINES (@col1,@col2,@dummy,@dummy,@col5,@col6) set abc=@col1,efg=@col2,hij=@col5,klm=@col6";
$status = mysqli_query($con,$query) or die(mysqli_error($con));
//If successful insert, mark the CSV as imported
$filename = $csvfilelocation;
if ($status) {
$stmt = mysqli_prepare($con, "UPDATE xxx_list SET putindatabase = 1 WHERE filename = ?");
mysqli_stmt_bind_param($stmt, "s", $filename);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
}
Комментарии:
1. Удалите 2751-й и повторите попытку.
2. @selami попробовал это. Не работает. Кроме того, все CSV-файлы одинаковы с точки зрения столбцов, формата и т. Д. — Кроме данных в них.
3. Возможно, происходит тайм-аут; попробуйте увеличить его или установить равным нулю. php.net/manual/en/function.set-time-limit.php и, возможно
upload_max_filesize
, это могло бы сыграть здесь свою роль, но я сомневаюсь в последнем.4. @Fred-ii — Время ожидания не истекло. Процесс запущен — он продолжает перебирать CSV, как будто все работает. Однако данных нет в MySQL.
5. Затем проверьте наличие ошибок в запросе ОБНОВЛЕНИЯ, посмотрите, обнаруживает ли он что-нибудь, и сообщение об ошибках, если это вообще связано с ним.
Ответ №1:
Я так и не понял, почему это происходит. Я решил свою проблему, разбив CSV на разные базы данных вместо того, чтобы объединять их все в одну.