0

我正在编写以下脚本,将 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());
?>
4

2 回答 2

2

除非你 100% 依赖用户,而且看起来你不是,否则最好不要盲目导入上传的文件,但首先要检查它是否正确。

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


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

这里只是一些:

于 2012-01-14T00:55:35.653 回答
0

它可以通过 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 格式匹配,并且您可以通过这种方式导入。

于 2012-01-14T01:01:53.843 回答