2013-07-09 155 views
1

我目前有一個CSV,一旦上傳,應該由upload.php讀取,然後將這些數據上傳到數據庫。似乎無法將CSV數據插入到數據庫中

目前我可以看到它正在從CSV文件中獲取正確的數據,它也試圖將正確的數據插入到數據庫中,但它似乎並未最終將數據插入到數據庫中數據庫。

這可能是什麼?

下面的代碼:

upload.php的

<?php 
include('config.php'); 

$file = "test.csv"; 
$separator = ","; 
$length = 0; // size of the longest line(!), 0 = no limit 
$fields = array('title', 'firstName', 'secondName', 'emailAddress', 'houseNumber', 'mobileNumber', 'address1', 'address2', 'address3', 'address4', 'postcode'); // use it as a white list 

$handle = fopen($file, "r"); 

// get 1st line (header) and flip keys and values 
// format like [title] --> 0, [firstName] --> 1, ... 
$header = array_flip(fgetcsv($handle, $length, $separator)); 

$values = array(); 

// while we can read lines as csvData: 
while(($csvData = fgetcsv($handle, $length, $separator)) !== false){ 
    foreach ($fields as $field){ // put all values in an array in correct order 
     $values[] = $csvData[$header[$field]]; 
     echo $field."<br>"; 
     mysql_query("INSERT INTO csv (" . implode(',', array_keys($header)) . ") VALUES (" . implode(',', $values) . ")"); 
    } 
} 
fclose($handle); 

?> 

在此先感謝。

+0

正常情況下,我回應查詢,出了PHP腳本,並直接在sql服務器上執行生成的隊列來查看查詢是否有效。 –

+0

@AyeTry - 您可能想要刪除該評論;它看起來就像是你的名字,電話號碼和街道地址...... – andrewsi

+0

我認爲,當我完成它,但無論如何感謝,你只是不知道誰在這裏我想,歡呼聲。 – AyeTry

回答

1

您的查詢未封閉的字符串引號:

mysql_query("INSERT INTO csv (" . implode(',', array_keys($header)) . ") VALUES (" . implode(',', $values) . ")"); 

會產生SQL這樣的:INSERT INTO csv (foo,bar,baz) VALUES (a,b,c);

嘗試:

mysql_query("INSERT INTO csv (" . implode(',', array_keys($header)) . ") VALUES ('" . implode("','", $values) . "')"); 

不過。更好的辦法是切換到mysqliPDO並使用參數化查詢。就其本身而言,您的代碼易受SQL注入攻擊。

請注意,mysql_error提供了發生的最後一個SQL錯誤,並有助於找出問題。

+0

這很好用,但不幸的是它只能從CSV中插入一行數據。代碼中有什麼可以阻止它?我被告知fgetcsv函數可能是罪魁禍首。 – AyeTry

+0

看着你的循環,你似乎在做每個字段的插入。嘗試將'mysql_query'移出for循環。 – Jim

+0

奇怪它仍然只插入一個到數據庫中,但是當我回顯INSERT時,它會經歷while循環並顯示來自CSV的兩行數據。你有什麼線索可能是什麼? – AyeTry

相關問題