2016-10-07 3 views
2

Я импортирую данные из CSV-файла в базу данных Mysql. Код работает нормально, но не вставляет первую строку файла csv.Невозможно импортировать CSV в Mysql правильно

<?php 
if(isset($_POST["Import"])) 
{ 
//First we need to make a connection with the database 
$host='localhost:3311'; // Host Name. 
$db_user= 'root'; //User Name 
$db_password= 'root'; 
$db= 'compared'; // Database Name. 
$connect=mysqli_connect($host,$db_user,$db_password,$db); 
echo $filename=$_FILES["file"]["tmp_name"]; 
if($_FILES["file"]["size"] > 0) 
{ 
    $csv_file = $filename; // Name of your CSV file 
$csvfile = fopen($csv_file, 'r'); 
$theData = fgets($csvfile); 
$i = 0; 
while (!feof($csvfile)) 
{ 
    $csv_data[] = fgets($csvfile, 1024); 
    $csv_array = explode(",", $csv_data[$i]); 
    $insert_csv = array(); 
    $insert_csv['0'] = $csv_array[0]; 
     $insert_csv['1'] = $csv_array[1]; 
    $insert_csv['2'] = $csv_array[2]; 
    $insert_csv['3'] = $csv_array[2]; 
    $insert_csv['4'] = $csv_array[2]; 
    $query = "INSERT INTO reviews(id,userid,title, review, rating) 
VALUES('".$insert_csv['0']."','".$insert_csv['1']."','".$insert_csv['2']."','". $insert_csv['3']."','".$insert_csv['4']."')"; 
    $n=mysqli_query($connect,$query); 
    $i++; 
} 
fclose($csvfile); 
echo "File data successfully imported to database!!"; 
} 
} 

?> 


<form enctype="multipart/form-data" method="post" role="form"> 
<div class="form-group"> 
    <label for="exampleInputFile">File Upload</label> 
    <input type="file" name="file" id="file" size="150"> 
    <p class="help-block">Only Excel/CSV File Import.</p> 
</div> 
<button type="submit" class="btn btn-default" name="Import" value="Import">Upload</button> 
</form> 

это данные

1,2,abc,abc,3 
2,3,abc,abcd,5 
11,2,abc,abc,3 
22,3,abc,abcd,5 

Она вставляет от второй линии и пропускает первую строку. Может ли кто-нибудь это исправить?

ответ

4

Вы выполняете первый fgets вне цикла, а затем сразу после этого другой в начале цикла, тем самым пропуская первый результат.

do-while конструкция должна решить вашу проблему:

$theData = fgets($csvfile); 
do { 
    // Extract data from $theData 

    // Insert into the database 

    // Get the next line: 
    $theData = fgets($csvfile); 
} while (!feof($csvfile)); 
+0

Я попробовал, он делает вставить строку, но все, что в есть нуль – Alex

+0

Хорошо получил это спасибо :) – Alex

Смежные вопросы