2012-01-14 150 views
0

我正在編寫以下腳本,將一個csv文件導入到mysql數據庫中。 用戶必須先登錄,然後才能通過其他文件檢查其上傳的安全權限,如果該值爲true,則可以通過文件上載器上載該文件,該文件僅允許上傳csv文件,然後再下載部分導入文件。上傳一個csv並將其導入到mysql數據庫中

我是否在下面使用了正確的代碼?,如果csv佈局錯誤,是否可以拒絕導入?,我只是擔心如果csv格式正確,這可能會嚴重錯誤。這項功能已經被要求作爲這個項目的一項要求,所以我只是想盡可能地讓它成爲一種白癡證明。

<?php 
$uploadedcsv = './uploads/'.$filename.''; 
$sql = 'LOAD DATA LOCAL INFILE "'.$uploadedcsv.'" INTO TABLE '.$table.' FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY """" IGNORE 1 LINES' or die(mysql_error()); 
?> 

回答

2

除非你是100%依賴於用戶,似乎你不是, 這將是很好,不要盲目導入上傳的文件,但首先要檢查它是否是正確的。

要做到這一點,您需要打開並閱讀文件,例如與fgetcsv並逐行檢查數據一致性。


你可以在網上找到很多例子。

下面就介紹幾種:

+0

謝謝,我會看看那個:-) – user1148760 2012-01-14 01:00:39

0

它可以通過MySQL的完成,但默認情況下LOAD DATA INFILE預計比CSV格式不同。從文檔:

If you specify no FIELDS or LINES clause, the defaults are the same as if you had written this: 

FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' 
LINES TERMINATED BY '\n' STARTING BY '' 

文檔的筆記,用CSV文件處理時爲:

LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name 
FIELDS TERMINATED BY ',' ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n' 
IGNORE 1 LINES; 

哪個處理由「」封閉的線分離由\ r逗號分隔值的一個例子, \ n

要使用此功能導入文件,請確保您的語句與上傳文件的CSV格式相匹配,並且可以通過此方式導入。

相關問題