我正在编写以下脚本,将csv文件导入mysql数据库。 用户必须先登录,并且他们的上传安全权限由另一个文件检查,如果评估结果为true,则文件可以通过文件up-loader上传,只允许上传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());
?>
答案 0 :(得分:2)
除非你100%依赖用户而且似乎你不是, 不要盲目导入上传的文件,但首先要检查它是否正确。
为此,您需要打开并阅读该文件,例如使用fgetcsv
并逐行检查数据一致性。
你可以在网上找到很多例子。
以下是一些:
答案 1 :(得分: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格式匹配,并且您可以通过这种方式导入。