2011-09-22 83 views
1

我想寫一個PHP腳本,將加載製表符分隔的CSV文件到MySQL數據庫表,以便我可以設置一個cron作業來自動化該過程。加載csv文件到MySQL數據庫與空白「列」與INSERT

問題:問題是,CSV文件包含許多空白「列」,包括空白列標題。

目標:我想要做的是將所有列加載到我的數據庫表中除了不包含列標題的列以外,即使數據字段爲空。作爲一個附加條件,有些列我根本不想要,即使它們包含標題。

例如,對於參數的緣故,我的csv文件包含以下內容:

ID [標籤] NAME [標籤] [標籤] [標籤] LOCATION [標籤] FAX [標籤] PHONE [結束]
111 [標籤]比利[標籤] [標籤] [標籤]西雅圖[標籤] [標籤] 111-111-1111 [結束]
112 [標籤]鮑勃[標籤] [標籤] [tab] Atlanta [tab] 111-111-1112 [tab] 111-111-1114 [end]

請注意,在上面的示例中,不僅某些列缺少標題,而且某些數據字段對於標題列是空的。

舉個例子,在我的數據庫表中,我有以下的列標題:

ID | NAME |位置|電話< - 注意我根本不需要傳真列。

我不能使用LOAD DATA INFILE,所以我假設我需要通過PHP通過插入函數做的一切。

我知道一些PHP,但不能做我以上要求的。請幫忙。

+0

的可能重複[如何導入到MySQL表使用LOAD DATA INFILE時跳過CSV文件列?(http://stackoverflow.com/questions/2139069/how-to-skip-columns -in-CSV文件-當進口 - 到 - MySQL的表 - 使用的負載數據-i)的 –

回答

1

使用PHP函數fgetcsv()

if (($handle = fopen('filename.csv', 'r')) !== FALSE) 
{ 
    while (($data = fgetcsv($handle, 10000, "\t")) !== FALSE) 
    { 
     print_r($data); // here you get one row -> array with all fields 
     // here you can build a SQL insert query  

    } 
    fclose($handle); 
} 
0

像下面這樣使用file()str_getcsv()可能的工作:

$file = file('csv.csv'); 
$cols = str_getcsv(array_shift($file), "\t"); 
foreach ($file as $line) { 
    $cells = str_getcsv($line, "\t"); 
    $set = array(); 
    for ($i = 0; $i < sizeof($cols); $i++) { 
     $set[] = "`{$cols[$i]}` = '{$cells[$i]}'"; 
    } 
    $sql = "INSERT INTO `table` SET " . implode(',', $set); 
    mysql_query($sql); 
}