上传一个csv并将其导入到mysql数据库中

问题描述:

我正在编写以下脚本,将一个csv文件导入到mysql数据库中。 用户必须先登录,然后才能通过其他文件检查其上传的安全权限,如果该值为true,则可以通过文件上载器上载该文件,该文件仅允许上传csv文件,然后再下载部分导入文件。上传一个csv并将其导入到mysql数据库中

我是否在下面使用了正确的代码?,如果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并逐行检查数据一致性。


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

下面就介绍几种:

+0

谢谢,我会看看那个:-) – user1148760 2012-01-14 01:00:39

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