2015-09-23 23 views
2

我似乎無法弄清楚,但我的代碼插入1空行(第1行)。空白行有空白車名,空白車品牌,車價只有「0.00」。該代碼用於上傳csv文件並從該csv文件獲取數據並插入數據庫。第一行是列標題,我假設$GetHeaders = fgetcsv($file);的首次調用將用於標題。PHP mysql INSERT導致空白的第一行

$file = fopen($_FILES['fileupload']['tmp_name'],"r"); 

$GetHeaders = fgetcsv($file); 
$CarName = array_search('Car Name', $GetHeaders); 
$CarBrand = array_search('Car Brand', $GetHeaders); 
$CarPrice = array_search('Car Price', $GetHeaders); 

$theQue = ""; 
while(! feof($file)) 
{ 
    $GetHeaders = fgetcsv($file); 
    $theQue .= "INSERT INTO cardb (CarName, CarBrand, Carprice) VALUES ('$GetHeaders[$CarName]', '$GetHeaders[$CarBrand]', '$GetHeaders[$CarPrice]')"; 
} 

fclose($file); 

if (mysqli_multi_query($connection, $theQue)) 
{ 
    echo "Success"; 
} 
+1

[您的腳本存在SQL注入攻擊的風險。](http://stackoverflow.com/questions/60174/how-can-i -prevent-sql -injection-in-php) –

+0

向我們展示一些示例數據 –

+0

*當你看到這個山姆時,這個標籤已經被關閉了。* - @JayBlanchard –

回答

0

有幾件事情可能導致這種情況..首先嚐試刪除您的CSV文件中的標題行。接下來在將數據寫入數據庫之前,檢查數據行是否等於空白或空值。

<?php 
//open the csv file for reading 
$jhandle = fopen($file_path, 'r'); 
$row_limit=1000;     
while (($jdata = fgetcsv($jhandle, $row_limit, ",")) !== FALSE) { 
$car_name = $jdata[0]; 
$car_brand = $jdata[1]; 
$car_price = $jdata[2]; 
If(($car_name != '')||($car_brand != '')||($car_price > 0)){ 
//write to your database here. 
} 
//close your while statement 
} 
+1

爲什麼OP應該這樣做?一個好的答案將總是解釋所做的事(例如)以及爲什麼這樣做,不僅是爲了OP,而且是爲了將來的訪問者。 –

+0

我無法刪除標題或第一行,我需要它來標識每個列。我的想法是在fgetcsv中出現問題。我們只能在循環內部調用fgetcsv()嗎?在我的情況下,我首先調用fgetcsv()一次來獲取標題,然後在一個循環中獲取行。 –

+0

周杰倫..你也沒有幫助..坐在那裏叫人出去是零幫助,所以除非你想幫助..只是留下你的自我評論。我們都欣賞它。 –

0

發佈和結束此調查結果,以便其他人遇到與fgetcsv問題將得到此提示。

這很奇怪,但經過多次測試後,我發現fgetcsv正在讀取CSV文件中的每一行,但還有一行是由fgetcsv讀取的,這是一個NULL。

就好像有一個看不見的行,它是最後一行。它只顯示在數據庫中的第一行,可能是因爲自動排序或其他原因,但它最後一行fgetcsv得到的是NULL。我認爲它應該檢測到NULL作爲EOF?

我所做的檢測bug是不是我應該在第一時間做了這是使用回聲vardump這顯示所有的車名和最後一輛車被命名爲「NULL」

謝謝你的幫助球員,你們每個人給我的想法,導致我找到這個刺大聲笑