似乎无法将CSV数据插入数据库

时间:2013-07-09 12:54:47

标签: php mysql csv sql-insert

我目前有一个上传的CSV应该由upload.php读取,然后将这些数据上传到数据库。

目前我可以看到它正在获取数组,从CSV文件中获取正确的数据,并且它还试图将正确的数据插入到数据库中,但它似乎似乎并不是最终将数据插入到数据库中数据库中。

这可能是什么?

以下代码:

upload.php的

<?php
include('config.php');

$file = "test.csv";
$separator = ",";
$length = 0; // size of the longest line(!), 0 = no limit
$fields = array('title', 'firstName', 'secondName', 'emailAddress', 'houseNumber', 'mobileNumber', 'address1', 'address2', 'address3', 'address4', 'postcode'); // use it as a white list

$handle = fopen($file, "r");

// get 1st line (header) and flip keys and values
// format like [title] --> 0, [firstName] --> 1, ...
$header = array_flip(fgetcsv($handle, $length, $separator));

$values = array();

// while we can read lines as csvData:
while(($csvData = fgetcsv($handle, $length, $separator)) !== false){
    foreach ($fields as $field){ // put all values in an array in correct order
        $values[] = $csvData[$header[$field]];
        echo $field."<br>";
        mysql_query("INSERT INTO csv (" . implode(',', array_keys($header)) . ") VALUES (" . implode(',', $values) . ")"); 
    }
}
fclose($handle);

?>

提前致谢。

1 个答案:

答案 0 :(得分:1)

您的查询未将字符串括在引号中:

mysql_query("INSERT INTO csv (" . implode(',', array_keys($header)) . ") VALUES (" . implode(',', $values) . ")"); 

将生成如:INSERT INTO csv (foo,bar,baz) VALUES (a,b,c);

的SQL

尝试:

mysql_query("INSERT INTO csv (" . implode(',', array_keys($header)) . ") VALUES ('" . implode("','", $values) . "')"); 

然而。更好的方法是切换到mysqliPDO并使用参数化查询。就目前而言,您的代码很容易受到SQL注入的攻击。<​​/ p>

请注意mysql_error提供了最后发生的SQL错误,并且有助于追踪问题。