【问题标题】:Upload a csv and import it into the mysql database上传一个csv并导入mysql数据库
【发布时间】:2012-02-10 03:48:31
【问题描述】:

我正在编写以下脚本,将 csv 文件导入 mysql 数据库。 用户必须先登录,并且他们的上传安全权限由另一个文件检查,如果评估为真,则文件可以由文件上传器上传,该文件上传器只允许上传 csv,然后是以下部分导入文件。

我在下面使用了正确的代码吗?如果 csv 布局错误,是否可以拒绝导入?我只是担心如果 csv 格式正确,这可能会出现严重错误。此功能已被要求作为该项目的要求,因此我只是试图使其尽可能地成为他们的白痴证明。

<?php
$uploadedcsv = './uploads/'.$filename.'';
$sql = 'LOAD DATA LOCAL INFILE "'.$uploadedcsv.'" INTO TABLE '.$table.' FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY """" IGNORE 1 LINES' or die(mysql_error());
?>

【问题讨论】:

    标签: php mysql csv uploader


    【解决方案1】:

    除非你 100% 依赖用户,而你似乎不是, 上传的文件最好不要盲目导入,先检查是否正确。

    为此,您需要打开并读取文件,例如与fgetcsv 并逐行检查数据一致性。


    你可以在网上找到很多例子。

    这里只是一些:

    【讨论】:

      【解决方案2】:

      它可以通过 MySQL 完成,但默认情况下 LOAD DATA INFILE 需要与 CSV 不同的格式。来自文档:

      If you specify no FIELDS or LINES clause, the defaults are the same as if you had written this:
      
      FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\'
      LINES TERMINATED BY '\n' STARTING BY ''
      

      文档说明,用于处理 CSV 文件时:

      LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name
      FIELDS TERMINATED BY ',' ENCLOSED BY '"'
      LINES TERMINATED BY '\r\n'
      IGNORE 1 LINES;
      

      这是处理用“”括起来并用\r\n行分隔的逗号分隔值的示例

      要使用它来导入文件,请确保您的语句与您上传文件的 CSV 格式匹配,并且您可以通过这种方式导入。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-21
        • 2023-04-03
        相关资源
        最近更新 更多