2013-02-02 78 views

回答

1

MySQL有一个功能LOAD DATA INFILE,它允许它直接在单个SQL查询中导入CSV文件,而不需要通过PHP程序在循环中处理它。

简单的例子:

  <?php 
      $query = <<<eof 
       LOAD DATA INFILE '$fileName' 
       INTO TABLE tableName 
       FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '"' 
       LINES TERMINATED BY '\n' 
       (field1,field2,field3,etc) 
      eof; 

      $db->query($query); 
      ?> 

就这么简单。

没有循环,没有大惊小怪。而且比在PHP中解析它要快得多。

MySQL手册页面在这里:

如:http://dev.mysql.com/doc/refman/5.1/en/load-data.html

希望帮助 author

+7

请给信贷的作者,如果你通过Word中复制一个答案字[使用PHP/MySQL的导入CSV数据]:[使用PHP/MySQL导入CSV数据](http://stackoverflow.com/q/11448307/1456376) – insertusernamehere

0

见下文

csv2sql("pre_employee","ch_data.csv"); 

function csv2sql($table_name,$csvname) 
{ 
$fl=fopen($csvname,r); 
//if(!file_exists('a.txt')) 
//{ 
    $flw=fopen("a.txt",'w'); 
//} 
$sql=''; 
$i=2; 
//echo $csvname.$data=fgetcsv($fl,1000,",");die(); 
while(($data=fgetcsv($fl,1000,","))!=false) 
{ 
    $sql.="insert into ".$table_name." values('".$data[0]."','".$data[2]."','".$data[3]."');".chr(13); 
    $i++; 
} 
//echo $sql; 
fwrite($flw,$sql); 
fclose($flw); 
fclose($fl); 
} 

A.TXT代码的文件名保存您的SQL。也不要将这个txt文件导入你的mysql数据库。

1

试试看。它使用一个函数将文件的行读入一个字符串数组,然后循环遍历每行并将列值存储到一个表中。显然你需要插入你的数据库连接设置和正确的查询。

function loadData() 
{ 
    $lines = readInputFromFile("myCSV.csv"); 
    for ($i = 0; $i < count($lines); $i++) 
    (
     $columns = explode(",", $lines[$i]); 
     $conn = new PDO("mysql:host=YOUR_HOST;port=YOUR_PORT;dbname=YOUR_DBNAME", "UserName", "Password"); 

     $query = "INSERT INTO MYTABLE VALUES ('".$columns[0]."', '".$columns[1]."', '".$columns[2]."')";  
     $stmt = $conn->prepare($query); 
     $stmt->execute(); 
    ) 
} 

function readInputFromFile($file) 
{ 
    $fh = fopen($file, 'r'); 
    while (!feof($fh)) 
    { 
     $ln = fgets($fh); 
     $parts[] = $ln; 
    } 

    fclose($fh); 

    return $parts; 
}