我目前有一个上传的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);
?>
提前致谢。
答案 0 :(得分:1)
您的查询未将字符串括在引号中:
mysql_query("INSERT INTO csv (" . implode(',', array_keys($header)) . ") VALUES (" . implode(',', $values) . ")");
将生成如:INSERT INTO csv (foo,bar,baz) VALUES (a,b,c);
尝试:
mysql_query("INSERT INTO csv (" . implode(',', array_keys($header)) . ") VALUES ('" . implode("','", $values) . "')");
然而。更好的方法是切换到mysqli
或PDO
并使用参数化查询。就目前而言,您的代码很容易受到SQL注入的攻击。</ p>
请注意mysql_error
提供了最后发生的SQL错误,并且有助于追踪问题。