使用PHP将CSV数据导入mySQL,第2部分

时间:2011-05-10 18:27:40

标签: php mysql csv

跟进我的最后一个帖子。尝试通过PHP上传脚本将用户生成的CSV导入MySQL。上传成功,但由于权限问题,我无法使用LOAD DATA。以下是我要做的事情:

$row = 1;
if (($handle = fopen($target_path, "r")) !== FALSE) 
  {
   while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
    {
     $num = count($data);
     echo "<p> $num fields in line $row: <br /></p>\n";
     $row++;
 for ($c=0; $c < $num; $c++) 
 {
  $fullRow = $fullRow . $data[$c] . "," ;
 }
 echo $fullRow;
mysql_query("INSERT INTO foo (field1, field2, field3, field4) VALUES ('$fullRow')");
$fullRow = NULL;
}
   fclose($handle);
  }

echo $fullRow从CSV文件中逐出该行的逐字副本,但最后还有一个逗号。这是插入不正常的原因吗?当我通过phpMyAdmin手动上传时,导入的CSV文件没有问题。或者代码的VALUE ('$fullRow')位是否有问题?

2 个答案:

答案 0 :(得分:0)

您只需删除最后一个逗号即可。

for ($c=0; $c < $num; $c++) 
 {
  $fullRow = $fullRow . $data[$c] . "," ;
 }
 echo $fullRow;
 $fullRow = substr($fullRow,0,-1);

而且你的脚本也不行。

mysql_query(" INSERT INTO foo (field1, field2, field3, field4) VALUES ('$fullRow') " );
$fullRow = NULL;

答案 1 :(得分:0)

Paolo_NL_FR的修复程序可以让您启动并运行。该脚本可以使用一些TLC,甚至没有基本的SQL注入保护。尝试这样的事情:

if (($handle = fopen($target_path, "r")) !== FALSE) 
{
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
    {
        $values = implode(",", array_map('mysql_real_escape_string', $data));
        mysql_query("INSERT INTO foo (field1, field2, field3, field4) VALUES ($values);");
    }

    fclose($handle);
}