【问题标题】:PHP, MySQL - Insert CSV file with headerPHP,MySQL - 插入带有标题的 CSV 文件
【发布时间】:2014-11-23 19:24:09
【问题描述】:

我有带有标题和数据字段的 CSV 文件。如何通过 SQL 查询插入它并删除标题。目前我编写的代码正在运行,但它将标头作为数据插入到数据库中。

代码:

   $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;

【问题讨论】:

    标签: php mysql codeigniter csv


    【解决方案1】:

    您可以在加载数据中使用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);";
    

    这将导致输入跳过 CSV 的 1 行 - 我假设这是您的标题。跳过但是需要多行才能获取数据本身。

    【讨论】:

    • 我收到此错误:错误编号:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的“忽略 1 行”附近使用正确的语法
    • 发现错误 - 忽略需要在 LINES TERMINATED BY '\n' 之后的 1 行。感谢您的帮助:)
    【解决方案2】:

    试试这个:希望这对你有用..

    $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;
    

    【讨论】:

      猜你喜欢
      • 2020-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-25
      • 2015-03-30
      • 2016-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多