2012-12-17 42 views
0

我正在處理一個腳本,該腳本通常會將CSV文件上傳到MySQL數據庫。問題在於,CSV文件中的一個字段包含用戶生成的文本,其中可能包含對MySQL不友好的引用和其他字符。在將LOAD INFILE轉換爲MySQL之前轉義CSV文件

我確定上傳CSV文件的最有效方法是通過MySQL的'LOAD DATA INFILE'命令。下面是一個命令,它出現在MyPHPAdmin當我上傳CSV:

LOAD DATA LOCAL INFILE '/home/myfolder/tmp/property_re_1.csv' REPLACE INTO TABLE `markers` 
    FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\' 
    LINES TERMINATED BY '\r\n' # 2 rows affected. 

簡單加載CSV使用此命令不起作用,作爲過程,因爲它運行儘快終止於「」「和」 ESCAPED BY'\'「似乎沒有達到其目的

在這種情況下,我想我可能必須先用PHP以編程方式將PHP文件中的引號轉義,然後將」Escaped「文件加載到MySQL在SQL中使用LOAD DATA INFILE命令

我確定這是一個常見問題,它有一個「最佳實踐」解決方案。本質上,我的腳本需要t o在將CSV文件加載到MYSQL表中之前,先「清理」一個CSV文件。

下面是實際的SQL表和CSV文件我一起工作的鏈接,幫助聰明的頭腦包住他們的頭這一個辦法:https://www.dropbox.com/sh/4iq10i51qlqyq8q/UjEQwvXKDA

感謝您的幫助提前。

+0

哪些代碼正在生成CSV?如果CSV生成正確,則不會有任何問題。如果CSV沒有正確生成,修復CSV生成器可能是最簡單的。如果該文件是用戶定義的,那麼您不僅僅需要擔心一個字段。 –

+0

CSV由我無法更改的外部數據庫生成, – AME

回答

2

Dropbox上的數據文件具有由,分隔的字段,可選地包含",行由\n分隔幷包含標題行;而上述語句適用於文件,其中的字段由;分隔,總是由"包圍,行由\r\n分隔且不包含任何標題行。

也就是說,它也是一個名爲data.csv的文件,而Dropbox上的文件名爲property_re_1.csv

 
mysql> CREATE TABLE IF NOT EXISTS `markers` ( 
    -> `L_ListingID` int(20) NOT NULL, 
    -> `L_Class` int(5) NOT NULL, 
    -> `L_Type_` int(10) NOT NULL, 
    -> `L_Status` varchar(10) NOT NULL, 
    -> `L_AskingPrice` float NOT NULL, 
    -> `L_Remarks` text NOT NULL, 
    -> `L_Address` varchar(50) NOT NULL, 
    -> `L_City` text NOT NULL, 
    -> `L_State` varchar(10) NOT NULL, 
    -> `LO1_OrganizationName` varchar(65) NOT NULL, 
    -> `LA1_AgentLicenseID` int(20) NOT NULL, 
    -> `LA1_UserFirstName` varchar(50) NOT NULL, 
    -> `LA1_UserLastName` varchar(50) NOT NULL, 
    -> `L_PictureCount` int(4) NOT NULL, 
    -> PRIMARY KEY (`L_ListingID`) 
    -> ) ENGINE=MyISAM DEFAULT CHARSET=latin1; 
Query OK, 0 rows affected (0.21 sec) 

mysql> LOAD DATA LOCAL INFILE 'property_re_1.csv' 
    -> REPLACE INTO TABLE `markers` 
    -> FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\\' 
    -> LINES TERMINATED BY '\n' IGNORE 1 LINES; 
Query OK, 315 rows affected (0.01 sec) 
Records: 315 Deleted: 0 Skipped: 0 Warnings: 0 
+0

很棒!謝謝! – AME

+0

如何將此SQL命令轉換爲PHP腳本? – AME