2013-02-02 80 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; 
}