Я вставляю данные в таблицу в виде массовой загрузки,
$ handle = fopen ($ _ FILES [‘file_clg’] [‘tmp_name’], «r»);
fgetcsv($handle);
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$collegename = trim(str_replace(array("’","'"),"'",$data[0]));
$description = trim(str_replace(array("’","'"),"'",$data[1]));
$sql1 = $db->selectquery("insert into $tbl(name,details)values('" .$collegename."','" .$description."')");
}
fclose($handle);
Здесь упоминаются только два поля: более 25 столбцов в моем CSV для массовой загрузки
Проблема заключается в том, что разделитель csv — это запятая (‘,’), но в некоторых случаях содержимое поля «детали» включает запятые, так как в этом случае запись вставлена неправильно.
как решить это дело ???
И проблема в разделе вставки,
Название колледжа: Инженерный институт Альвы & Технология (AIET)
и его сохраняют в виде таблицы в следующем формате:
Инженерный институт Альваса & Технология (AIET)
Я пытаюсь ниже код:
$collegename = htmlentities(iconv("cp1252", "utf-8", trim(str_replace(array("’","'"),"'",$data[0]))), ENT_IGNORE, "UTF-8");
но это не работает, как я могу решить проблему в одинарных кавычках
И я поместил: заголовок («Content-Type: text / html; charset = ISO-8859-1»);
в заголовок раздела ..
Мне нужно было бы увидеть некоторые примеры, чтобы сказать что-нибудь с уверенностью, но есть спецификации для цитирования значений с запятыми, чтобы сохранить счетчик значений.
https://stackoverflow.com/a/769675/2943403
Кроме того, вы можете создать новый fputcsv()
блок кода, который будет генерировать CSV-файл с разделителями точкой с запятой (или другим неконфликтующим символом). Я не предоставляю фактический фрагмент для этого. Есть много доступных ресурсов на SO, в том числе:
Тогда ваш цикл while может использовать ;
(или что угодно) в качестве разделителя.
Что касается безопасного размещения ваших значений (которые могут иметь одинарные кавычки) в вашем запросе, используйте готовые заявления
// I realize your query will be much larger than the sample...
// declare $collegename and $decription values
$stmt=$db->prepare("INSERT INTO `$tbl` (`name`,`details`) VALUES (?,?)");
$stmt->bind_param("ss", $collegename,$description);
if($stmt->execute()){
echo "success";
}else{
echo "Error: ",$db->error;
}
Других решений пока нет …