Я думаю, что ваш образец линии CSV
Test, Test,,test@test.com
предназначен для того, чтобы стать этими четырьмя значениями для столбцов вашей базы данных
Test
Test
(null)
test@test.com
Но третий столбец отображается как строка нулевой длины в вашем массиве $row
, поэтому он вставляется в таблицу как строка нулевой длины. Ваше утверждение INSERT будет выглядеть так:
INSERT INTO test(cognome,nome,etichetta,email) VALUES('Test',' Test','','test@test.com')
См. Пустую строку для etichetta
?
Вам необходимо заменить эту строку:
$value = "'". implode("','", $row) ."'";
с некоторым более умным кодом для циклического перебора элементов $row
, интерпретирующим их более изощренным образом. Может быть, что-то подобное будет работать. (НЕ отлажено!)
$cols = [];
foreach ($row as $col) {
if (strlen($row) == 0) array_push ($cols, "NULL")
else array_push ($cols, "'" . mysqli_real_escape_string($row) . "'")
}
$value = implode (',', $cols);
Результат будет
INSERT INTO test(cognome,nome,etichetta,email) VALUES('Test',' Test',NULL,'test@test.com')
И использование real_escape_string будет корректно обрабатывать такие имена, как O'Sullivan
и Johnny ';DROP TABLE test;
.