来自CSV文件上传的PHP MySQL LOAD DATA INFILE

时间:2015-08-28 05:43:35

标签: php mysql csv

我正在尝试学习如何将新记录上传到MySQL表,但到目前为止似乎失败了。我的尝试:

$uploaded = $_FILES["fileupload"]["name"];
`$try = mysqli_query($connect,"LOAD DATA INFILE IGNORE $uploaded INTO TABLE allrecords");`

我收到错误。虽然代码很乱,但预计会如此。我尝试在谷歌搜索,但似乎只提供每个记录逐个插入数据库。我使用标签选择Excel CSV文件(从Excel导出),然后在接收的PHP文件中使用此查询。

我使用LOAD DATA INFILE IGNORE,因为我想将新记录上传到数据库,但不包括数据库中已存在主键的记录。此外,我不知道如何做LOAD DATA INFILE并匹配每个字段。我是否需要重命名Excel CSV中的每个列名称/标题以匹配数据库中的字段名称?

1 个答案:

答案 0 :(得分:1)

正如@drew在上面的评论中明智地提到的那样,你在LOAD DATA语句中缺少围绕文件名的单引号,这可能会搞砸。您可能也会遗漏一些阻止其工作的其他事情。

请尝试使用此PHP代码:

$uploaded = $_FILES["fileupload"]["name"];
`$try = mysqli_query($connect,"LOAD DATA INFILE IGNORE '$uploaded' INTO TABLE allrecords FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY ',,,\r\n'");`

这是LOAD DATA命令作为单独的(可读)查询:

LOAD DATA INFILE IGNORE '$uploaded'
INTO TABLE allrecords
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY ',,,\r\n'

请注意 OPTIONALLY ENCLOSED BY中的双引号必须转义,以便PHP不会阻塞。

另外,对于处理数据可以做什么,LOAD DATA是相当原始的。它旨在作为将原始数据引入MySQL的主力。对于原始数据的复杂过滤和操作,您可能最好在MySQL中正常工作。