【发布时间】:2011-02-27 12:17:36
【问题描述】:
如何将 CSV 文件的内容逐行导入 MySQL 数据库?我尝试了几种方法,但使用 fgetcsv 永远无法返回超过一行。我尝试过的一种方法似乎非常接近工作:
$fileName = $_FILES['SpecialFile']['name'];
$tmpName = $_FILES['SpecialFile']['tmp_name'];
$fileSize = $_FILES['SpecialFile']['size'];
if(!$fileSize)
{
echo "File is empty.\n";
exit;
}
$fileType = $_FILES['SpecialFile']['type'];
$file = fopen($tmpName, 'r');
if(!$file)
{
echo "Error opening data file.\n";
exit;
}
while(!feof($file))
{
$data = str_replace('"','/"',fgetcsv($file, filesize($tmpName), ","));
$linemysql = implode("','",$data);
$query = "INSERT INTO $databasetable VALUES ('$linemysql')";
return mysql_query($query);
}
fclose($file);
只输入一行,但如果我 print_r $data 它返回所有行。如何让它插入所有行?
另一种方法:
$data = str_getcsv($csvcontent,"\r\n","'","");
foreach($data as &$Row)
{
$linearray = str_getcsv($Row,',',''); //parse the items in rows
$linemysql = implode("','",$linearray);
echo $query = "INSERT INTO $databasetable VALUES ('$linemysql')";
}
这几乎也可以,但是 csv 中的文本也包含新行,所以我不知道如何拆分实际行而不是文本中的新行。??
【问题讨论】:
-
发布您正在使用的代码。您是否尝试过运行手册中显示的示例? docs.php.net/manual/en/function.fgetcsv.php
-
您可以发布您尝试过的代码示例吗?此外,可以提供错误详细信息 - 如果有的话?这可能是您的脚本的问题,也可能是 MySQL 的表定义问题(常见的问题是未设置为自动递增的主键)。
-
有什么理由不能使用加载数据 infile 吗? dev.mysql.com/doc/refman/5.0/en/load-data.html
-
我是否遗漏了一些东西(没有多少 PHP 经验)- while 循环中的 return 语句不是解释了所描述的行为吗?这个循环怎么会运行不止一次?