【问题标题】:PHP MySQL LOAD DATA INFILE from CSV File UploadPHP MySQL LOAD DATA INFILE 从 CSV 文件上传
【发布时间】:2015-11-22 16:53:56
【问题描述】:

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

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

我得到一个错误。这是意料之中的,因为代码是一团糟。我尝试在 Google 中搜索,但似乎都只提供将每条记录一一插入到数据库中。我使用标签选择 Excel CSV 文件(从 Excel 导出),然后在接收的 PHP 文件上使用此查询。

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

【问题讨论】:

  • 发布您的错误消息或堆栈跟踪。
  • 我认为他想要做的@TimBiegeleisen 是将'/full/path/to/filename' 周围的那些单引号括起来,讽刺的是没有ignore 1 lines,并将第1 行调整为完美
  • @Drew 将此作为答案发布。并且 OP 应该包含错误输出。这样我就不必胡乱猜测了。
  • 啊,复活你的,不知道我有没有实力:>
  • 是的,伙计们,我刚刚在那个答案上确认了它。如果我不做单引号,我会得到错误 1064。把它们放回去,我得到我的出口。 OUTFILE 和 LOAD DATA INFILE 以语法挑剔的方式连接起来,并且几乎共享所有内容

标签: php mysql csv


【解决方案1】:

正如@drew 在上面的 cmets 中明智地提到的那样,您在 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 中进行适当的工作。

【讨论】:

  • 谢谢蒂姆和德鲁,我现在试试这个并回复你:)
  • 你是什么意思最好在 MySQL 中完成这项工作?您的意思是在循环中一一插入每一行吗?我打算先这样做,但我认为这会使进程运行得很慢?
  • 我的意思是,如果你有复杂的规则来选择性地保留/排除某些记录,你最好一次读取所有内容,然后清理 MySQL 中的表,那里有很多工具帮助您做到这一点。
  • 使用:$try = mysqli_query($connect,"LOAD DATA INFILE IGNORE '$uploaded' INTO TABLE allrecords FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY ',,,\r\n'"); 我得到错误:Parse error: syntax error, unexpected '' LINES TERMINATED BY '' (T_CONSTANT_ENCAPSED_STRING) in /home/hidden/public_html/subfolder/loader.php on line 41
  • 我忘了转义双引号。检查我更新的答案。很抱歉造成混乱。
猜你喜欢
  • 2013-01-24
  • 1970-01-01
  • 2013-05-26
  • 2011-09-01
  • 2013-09-25
  • 2013-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多