У меня есть следующий код, но он не работает. он только считывает первую строку csv-файла, почему? Кто-нибудь может мне помочь? я расстроен :(fgetcsv только чтение первой строки csv-файла (UPDATE: включает решение)
$handle = fopen($_FILES['prof_datei']['tmp_name'], "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$insert_profs_data = $db->prepare("INSERT INTO professoren (name, titel_prof, titel_dr, titel_ing) VALUES (:eins, :zwei, :drei, :vier)");
$insert_profs_data->bindParam(':eins', $data[0]);
$insert_profs_data->bindParam(':zwei', $data[1]);
$insert_profs_data->bindParam(':drei', $data[2]);
$insert_profs_data->bindParam(':vier', $data[3]);
$insert_profs_data->execute();
}
fclose($handle);
UPDATE Решение: Если вы работаете с Mac, чтобы выполнить этот код, вы должны добавить следующую строку кода, прежде чем открыть файл:
ini_set('auto_detect_line_endings', true);
PLS. добавьте первые 10 строк из CSV, чтобы мы могли помочь вам – codeneuss
Возможно, потому, что файл в '$ _FILES ['prof_datei'] ['tmp_name']' является временным файлом, который будет удален после завершения этого скрипта. Возможно, что-то в расширении MySQL дает PHP идею завершения скрипта, а затем PHP удаляет файл. Попробуйте переместить его в реальный файл, обработать его, а затем удалить. – RiggsFolly
Замечание в документах PHP для [fgetcsv()] (http://www.php.net/manual/en/function.fgetcsv.php) читает: 'Примечание: если PHP неправильно распознает окончания строк, когда чтение файлов, созданных или созданных компьютером Macintosh, включение опции настройки времени автономной работы auto_detect_line_endings может помочь решить проблему. « –