PHP,MySQL - 插入带有标题的 CSV 文件

Posted

技术标签:

【中文标题】PHP,MySQL - 插入带有标题的 CSV 文件【英文标题】:PHP, MySQL - Insert CSV file with header 【发布时间】: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;

【问题讨论】:

【参考方案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;

【讨论】:

以上是关于PHP,MySQL - 插入带有标题的 CSV 文件的主要内容,如果未能解决你的问题,请参考以下文章

将 CSV 中的中文字符插入 MySQL 时遇到问题

PHP向MySQL插入记录时中文乱码

PHP向MySQL插入记录时中文乱码

带有字符编码的 Python MySQL 批量插入错误

从 php mysql 中的 csv 文件的标题中删除反斜杠“\”

如何使用 CSV(平面文件)更新 MySQL 数据库并在插入前验证数据