将CSV文件导入MySQL数据库

时间:2012-08-01 20:40:34

标签: php mysql mysqldump mysql-error-1064

我有.CSV文件的记录,我想将它们导入MySQL数据库。

每当我导入.CSV时,我都会收到消息Import has been successfully finished...,但只有79条记录中的79条被插入到数据库中。

当我尝试导入包含411条记录的.CSV文件时,只插入282条。获得411条记录的CSV文件包括两类记录Active and Sold,其中有114条记录处于活动状态。

有人遇到过这类问题吗?如果是这样的话应该做什么?

3 个答案:

答案 0 :(得分:1)

我用php编写了自己的csv导入程序。我使用php命令fgetcsv读取csv文件,然后在循环中使用mysql insert命令。

$handle = fopen($this->file, "r");
$i=0;
$delimiter = ($this->fieldDelimiter == 'TAB') ? chr(9) : $this->fieldDelimiter;
while (($data = fgetcsv($handle, 10000, $delimiter)) !== FALSE)
{
     $mydata[] = $data;
}
fclose ($handle);
reset ($mydata);
if ($this->CSVhasTitle)
{
      $mydata = array_slice($mydata,1); //delete first row
}

然后我遍历我的数组并使用mysql insert:

foreach ($mydata as $value) 
{
     INSERT INTO $table (...) VALUES (....)
} 

但是我在循环之前将精确的列名添加到数组中。我有一系列所有列名。

答案 1 :(得分:1)

我也有这个问题。即使它有点陈旧,这些建议朝着一个方向发展,这是我找到的解决方案。我正在创建一个大型数据库并导入并发生同样的事情,经过试验和试验,我意识到一个密钥是以某种方式分配的(我不认识它,因为我使用新皮肤并且总是使用旧皮肤)。拿出了不是由我分配的钥匙,只留下了主要部分和繁荣,吸收了数据上传。此外,现在有问题,并请求超时您的问题。我将查看器显示向上推了很多,现在卡住,无法使用我的CP访问配置文件。因此,挂起和托管客户支持懒惰阅读我的问题,并在他们的最后覆盖它 - 我将不得不删除整个表而不是任何DROP,因为甚至无法运行SQL作为过载的冻结。因此,需要考虑的是让你的桌面视图向下,这在我的情况下很糟糕b / c我需要在视觉上快速查看17,000个记录,以确保我的.csv是正确的,而不是功能,好像问题然后可以发现它们和在控制中纠正,无论如何对我更有意义。

答案 2 :(得分:0)

查看您的CSV文件。它很可能包含类似

的内容
1,2,"some data",1
2,5,"data,with,comma",2

如果你没有指定COLUMNS OPTIONALLY ENCLOSED BY'''(SINGLE_QUOTE DOUBLE_QUOTE SINGLE_QUOTE),那么第二行第三列中字符串数据中嵌入的逗号将无法正确导入。

检查CSV以查看正在使用的机箱字符,并在phpmyadmin界面中指定。