2014-09-29 33 views
0

我有CSV帶有標題和數據字段的文件。我如何通過SQL查詢插入此消息並刪除標題。在我編寫的代碼正在工作的時候,它將頭部作爲數據插入到數據庫中。PHP,MySQL - 插入帶有標題的CSV文件

代碼:

$files = directory_map('./assets/csv/'); 
    foreach ($files as $file) : 
     $filefile = './assets/csv/' . $file; 
     $q = "LOAD DATA LOCAL INFILE '$filefile' INTO TABLE person FIELDS TERMINATED BY ',' 
       LINES TERMINATED BY '\n' (personal_name, personal_lastname, 
       personal_country,personal_address,contact_email,dateadded);"; 
     $this->db->query($q);   
    endforeach; 

回答

2

您可以使用加載數據ignore xx lines條款(在此文檔)http://dev.mysql.com/doc/refman/5.1/en/load-data.html]跳過大約三分之一的方式:

$q = "LOAD DATA LOCAL INFILE '$filefile' INTO TABLE person FIELDS TERMINATED BY ',' 
      LINES TERMINATED BY '\n' ignore 1 lines (personal_name, personal_lastname, 
      personal_country,personal_address,contact_email,dateadded);"; 

這將導致輸入跳過1 CSV的行 - 我認爲是你的標題。不管跳過多少行都需要到達數據本身。

+0

我收到此錯誤:**錯誤編號:1064 您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第3行'ignore 1 lines'附近使用正確的語法。** – Sasha 2014-09-29 12:00:03

+0

發現錯誤 - 忽略1行需要遵循** LINES TERMINATED BY'\ n'** 。感謝幫助 :) – Sasha 2014-09-29 12:04:55

0

試試這個:希望因此這會爲你工作..

$c = 1; 
$files = directory_map('./assets/csv/'); 

     foreach ($files as $file) : 
      if($c==2;) continue; 
      $filefile = './assets/csv/' . $file; 

      $q = "LOAD DATA LOCAL INFILE '$filefile' INTO TABLE person FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (personal_name, personal_lastname, personal_country,personal_address,contact_email,dateadded);"; 
      $this->db->query($q);   
$c++; 
     endforeach;