Php 上传csv并将其导入mysql数据库

Php 上传csv并将其导入mysql数据库,php,mysql,csv,uploader,Php,Mysql,Csv,Uploader,我正在编写以下脚本,将csv文件导入mysql数据库。 用户必须首先登录,并由另一个文件检查其上载的安全权限,如果评估结果为真,则可通过文件上传加载程序上载该文件,该加载程序只允许上载csv,然后以下部分导入该文件 下面的代码是否正确?如果csv布局错误,是否可以拒绝导入?我只是担心如果csv格式正确,可能会出现严重错误。这个特性已经被要求作为这个项目的一个要求,所以我只是试图使它尽可能的傻瓜证明他们 <?php $uploadedcsv = './uploads/'.$filename.

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

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

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


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

以下是一些:


这可以通过MySQL完成,但默认情况下,LOAD DATA Inflie需要与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格式匹配,并且您可以通过此方式导入