fgetcsv没有正确解析该行

时间:2014-01-23 07:11:38

标签: php sql-server parsing csv fgetcsv

这是我的CSV的第一行(answer.csv):

Respondent Name,name,1

我使用以下代码解析并将其插入db

if (($handle = fopen("answer.csv", "r")) !== FALSE) {
  while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    $num = count($data);
    echo $num;
    echo "<p> $num fields in line $row: <br /></p>\n";
    $row++;

    $query_add="INSERT INTO  answer (`AnswerValue`,`AnswerKey` ,`Question`)
    VALUES ($data[0],$data[1],$data[2])";
    echo $query_add;
    echo mysql_query($query_add) or die(mysql_error());
    #for ($c=0; $c < $num; $c++) {
    #    echo $data[$c] . "<br />\n";
    #}
  }
  fclose($handle);
  }

但是,我收到以下错误,因为该行未被“,”解析:

输出:

1 fields in line 1: 

Respondent Name name    1

    INSERT INTO answer (`AnswerValue`,`AnswerKey` ,`Question`) 
       VALUES (Respondent Name  name    1,,)

You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version for the right
syntax to use near 'Name    name 1,,)' at line 2

由于某种原因,它显示第1行只有一个字段,而如果我们查看csv文件则有3个字段......

任何人都知道为什么?

2 个答案:

答案 0 :(得分:1)

也许您的CSV文件字符集无效。确保它以UTF8编码。

答案 1 :(得分:0)

您必须将这些值放在引号中。

试试这个:

$query_add="INSERT INTO  answer (`AnswerValue`,`AnswerKey` ,`Question`)
    VALUES ('".$data[0]."','".$data[1]."','".$data[2]."')";

当我尝试使用上面的更改代码时,这就是结果:

3

3 fields in line :
INSERT INTO answer (`AnswerValue`,`AnswerKey` ,`Question`) 
VALUES ('Respondent Name','name','1')