#php #mysql #csv
#php #mysql #csv
Вопрос:
Продолжение моей последней темы. Попытка импортировать сгенерированный пользователем CSV-файл в MySQL с помощью скрипта загрузки PHP. Загрузка выполнена успешно, но я не могу использовать ЗАГРУЖАЕМЫЕ ДАННЫЕ из-за проблемы с разрешениями. Вот что я пытаюсь сделать вместо этого:
$row = 1;
if (($handle = fopen($target_path, "r")) !== FALSE)
{
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
{
$num = count($data);
echo "<p> $num fields in line $row: <br /></p>n";
$row ;
for ($c=0; $c < $num; $c )
{
$fullRow = $fullRow . $data[$c] . "," ;
}
echo $fullRow;
mysql_query("INSERT INTO foo (field1, field2, field3, field4) VALUES ('$fullRow')");
$fullRow = NULL;
}
fclose($handle);
}
echo $fullRow
выдает дословную копию строки из CSV-файла, за исключением дополнительной запятой в конце. Именно поэтому вставка работает некорректно? Когда я выполняю ручную загрузку через phpMyAdmin, CSV-файл импортируется без проблем. Или есть проблема с VALUE ('$fullRow')
битом кода?
Ответ №1:
Вы можете просто убрать последнюю запятую.
for ($c=0; $c < $num; $c )
{
$fullRow = $fullRow . $data[$c] . "," ;
}
echo $fullRow;
$fullRow = substr($fullRow,0,-1);
А также ваш скрипт не в порядке.
mysql_query(" INSERT INTO foo (field1, field2, field3, field4) VALUES ('$fullRow') " );
$fullRow = NULL;
Ответ №2:
Исправления Paolo_NL_FR должны помочь вам начать работу. Однако скрипт может использовать некоторый TLC и не имеет даже базовой защиты от sql-инъекций. Возможно, попробуйте что-то подобное:
if (($handle = fopen($target_path, "r")) !== FALSE)
{
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
{
$values = implode(",", array_map('mysql_real_escape_string', $data));
mysql_query("INSERT INTO foo (field1, field2, field3, field4) VALUES ($values);");
}
fclose($handle);
}