2011-09-22 81 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); 
}