Intereting Posts
fileinfo и типы mime, о которых я никогда не слышал Как преобразовать время MySQL в временную метку UNIX с помощью PHP? Рекурсивно цикл через многомерный для создания плоского массива mime_content_type возвращает текст / plain только для файлов css и js nodeJS и PHP (Laravel) для горячего чата Socket.IO Отправка XML-данных в webservice с использованием php curl Добавление элемента в начало массива без изменения других ключей массива Почему десятичные знаки не складываются правильно? Возобновляемая и частичная загрузка с завихрением PHP или подобным? 404 в реальном времени Google App Engine, работая на локальном SDK-сервере Поведение «header» в if-statement Как префикс CSS-фильтрации на основе белых списков в PHP циклический автоинкремент для каждого значения ключа Модель обновления Laravel с уникальным правилом проверки атрибута как перенаправить пользователя на определенную ссылку после входа в php

Чтение CSV-файла в php

Я хочу прочитать CSV-файл в PHP и поместить его содержимое в базу данных. Я написал следующий код:

$row = 1; $file = fopen("qryWebsite.csv", "r"); while (($data = fgetcsv($file, 8000, ",")) !== FALSE) { $num = count($data); $row++; for ($c=0; $c < $num; $c++) { echo $data[$c] . "\n";}} fclose($file); 

Я не получаю никаких ошибок, но это не показывает мне результат.

Я использую класс parseCSV для чтения данных из файлов csv. Это может обеспечить большую гибкость при чтении csv-файла.

это не проверено … но что-то вроде этого должно сделать трюк:

 $row = 1; if (($handle = fopen("xxxxxxxxx.csv", "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++) { $blackpowder = $data; $dynamit = implode(";", $blackpowder); $pieces = explode(";", $dynamit); $col1 = $pieces[0]; $col2 = $pieces[1]; $col3 = $pieces[2]; $col4 = $pieces[3]; $col5 = $pieces[5]; mysql_query(" INSERT INTO `xxxxxx` (`xxx`,`xxx`,`xxx`,`xxxx`,`xxx`) VALUES ('".$col1."','".$col2."','".$col3."','".$col4."','".$col5."') "); } } } 
 $fp = fopen('ReadMe.csv','r') or die("can't open file"); print "<table>\n"; while($csv_line = fgetcsv($fp,1024)) { print '<tr>'; for ($i = 0, $j = count($csv_line); $i < $j; $i++) { print '<td>'.$csv_line[$i].'</td>'; } print "</tr>\n"; } print '</table>'; fclose($fp) or die("can't close file"); 

Подробнее

Попробуй это….

В PHP часто бывает полезно читать CSV-файл и получать доступ к его данным. Вот где функция fgetcsv () пригодится, она будет считывать каждую строку файла CSV и присваивать каждое значение массиву ARRAY. Вы можете определить разделитель в функции, а также просмотреть документы PHP для fgetcsv () для получения дополнительных опций и примеров.

  function readCSV($csvFile){ $file_handle = fopen($csvFile, 'r'); while (!feof($file_handle) ) { $line_of_text[] = fgetcsv($file_handle, 1024); } fclose($file_handle); return $line_of_text; } // Set path to CSV file $csvFile = 'test.csv'; $csv = readCSV($csvFile); echo '<pre>'; print_r($csv); echo '</pre>'; 

Один лайнер для разбора CSV-файла в массив с помощью str_getcsv .

 $csv = array_map( 'str_getcsv', file( 'qryWebsite.csv' ) ); 

Чтобы создать запрос базы данных, который сразу импортирует все значения в базу данных:

 $query = "INSERT INTO tbl_name (a,b,c) VALUES " . implode( ',', array_map( function( $params ) use ( &$values ) { $values = array_merge( (array) $values, $params ); return '(' . implode( ',', array_fill( 0, count( $params ), '?' ) ) . ')'; }, $csv ) ); 

Это создаст подготовленное заявление с заполнителями вопросительных знаков, например:

 INSERT INTO tbl_name (a,b,c) VALUES (?,?,?),(?,?,?),(?,?,?),(?,?,?) 

, а переменные $values будут одномерным массивом, который содержит значения для оператора. Одно из предостережений здесь состоит в том, что файл csv должен содержать менее 65 536 записей (максимальное количество заполнителей).

Один лайнер для разбора CSV-файла в массив

 $csv = array_map('str_getcsv', file('data.csv')); 

Вы можете попробовать приведенный ниже код. Он отлично подходит для меня. У меня есть комментарий, чтобы сделать его более понятным. Вы можете получить ссылку на этот код.

 <?php //display error message if any ini_set('display_startup_errors',1); ini_set('display_errors',1); error_reporting(-1); //openup connection to database include('dbconnection.php'); //open csv file if (($handle = fopen("files/cities.csv", "r")) !== FALSE) { $flag = true; $id=1; //fetch data from each row while (($data = fgetcsv($handle, ",")) !== FALSE) { if ($flag) { $flag = false; continue; } //get data from each column $city_id = $data[0]; $country_name = $data[1]; $city_name = $data[2]; $state_code = $data[3]; //query to insert to database $sql = "INSERT IGNORE INTO `DB_Name`.`cities` (`id`,`city_id`, country_name`, `city_name`,`state_code`) VALUES ('$id','$city_id','$country_name','$city_name','$state_code')"; echo $sql; //execute the insertion query $retval = mysql_query($sql, $conn); if($retval == false ) { die('Could not enter data: ' . mysql_error()); } echo "<p style='color: green;'>Entered data having id = " .$id. " successfully</p><br>"; $id++; } echo "<br><p style='color: orange;'>Congratulation all data successfully inserted</p>"; fclose($handle); } //close the connection mysql_close($conn); в <?php //display error message if any ini_set('display_startup_errors',1); ini_set('display_errors',1); error_reporting(-1); //openup connection to database include('dbconnection.php'); //open csv file if (($handle = fopen("files/cities.csv", "r")) !== FALSE) { $flag = true; $id=1; //fetch data from each row while (($data = fgetcsv($handle, ",")) !== FALSE) { if ($flag) { $flag = false; continue; } //get data from each column $city_id = $data[0]; $country_name = $data[1]; $city_name = $data[2]; $state_code = $data[3]; //query to insert to database $sql = "INSERT IGNORE INTO `DB_Name`.`cities` (`id`,`city_id`, country_name`, `city_name`,`state_code`) VALUES ('$id','$city_id','$country_name','$city_name','$state_code')"; echo $sql; //execute the insertion query $retval = mysql_query($sql, $conn); if($retval == false ) { die('Could not enter data: ' . mysql_error()); } echo "<p style='color: green;'>Entered data having id = " .$id. " successfully</p><br>"; $id++; } echo "<br><p style='color: orange;'>Congratulation all data successfully inserted</p>"; fclose($handle); } //close the connection mysql_close($conn);