2010-11-10 129 views
8

我要导入CSV文件到MySQL ..类似:导入CSV文件直接到MySQL

load data local infile 'uniq.csv' into table tblUniq 
fields terminated by ',' 
enclosed by '"' 
lines terminated by '\n' 
(uniqName, uniqCity, uniqComments) 

http://www.tech-recipes.com/rx/2345/import_csv_file_directly_into_mysql/

但列名的CSV和数据库中的表是不同的我应该怎么办? 我想以编程的方式做。

+1

你将不得不提供更多的信息。例如,CSV文件的前几行是什么?当您运行该查询时,您希望发生什么?反而发生了什么? – cdhowie 2010-11-10 11:27:10

回答

3

您可以创建一个脚本来解析您的csv文件并将数据放入数据库。

是这样的:在CSV

$path = "yourfile.csv"; 
    $row = 1; 
    if (($handle = fopen($path, "r")) !== FALSE) { 
     while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
      $row++; 
      $data_entries[] = $data ; 

     } 
     fclose($handle); 
    } 
    // this you'll have to expand 
    foreach($data_entries as $line){ 
     $sql = "INSERT INTO ..." 
     $db->execute($line); 
    } 
+0

..我遇到了这个问题,我发现你的答案..你可以告诉我这是什么$行做..?因为我的$ data只返回单行值。谢谢 – Criesto 2014-01-09 09:48:29

+0

我猜这里没有做任何事情......可能我在清理真实代码的过程中将它留在了这个例子 – 2014-01-10 14:04:06

+0

因此,你愿意写出完整的代码plz ..吗? – Criesto 2014-01-13 13:14:26

11

但列名,并在数据库表是不同的我应该怎么办?

没问题。您可以指定将哪个CSV列导入到哪个数据库列。

LOAD DATA INFILE syntax

默认情况下,当在LOAD DATA INFILE语句的末尾不设置列列表,输入线可望包含一个字段为每个表列。如果你只想要加载一些表中的列中,指定列的列表:

LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata (col1,col2,...); 

我想做什么时,我发现INFILE语法过于复杂是使用图形客户端像HeidiSQL点击在一起正确的列顺序(它具有图形预览)并复制并粘贴生成的SQL查询。

3

如果要加载只能从CSV最后一列的前7个字符的文件到表中的列uniqComments,那么你可以做这样的事情...

load data local infile 'uniq.csv' into table tblUniq fields terminated by ',' 
enclosed by '"' lines terminated by '\n' (uniqName, uniqCity, @seven_chars) 
set uniqComments=left(@seven_chars,7) 
0

试试这个,这对我来说工作得很好。

ini_set('auto_detect_line_endings',TRUE); 

$csv_data=array(); 

$file_handle = fopen($_FILES['file_name']['tmp_name'], 'r'); 

while(($data = fgetcsv($file_handle)) !== FALSE){ 

$update_data= array('first'=>$data['0'], 
         'second'=>$data['1'], 
         'third'=>$data['2'], 
         'fourth'=>$data['34']); 

// save this array in your database 
} 
0

以下语句将csv文件中的数据导入到用户表中。

LOAD DATA INFILE 'c:/xampp/example.csv' 
INTO TABLE users 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
IGNORE 1 ROWS; 

Import CSV file into MySQL