1

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

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

这可能是什么?

下面的代码:

上传.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);

?>

提前致谢。

4

1 回答 1

1

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

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

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

尝试:

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

然而。更好的是切换到mysqliPDO使用参数化查询。就目前而言,您的代码容易受到 SQL 注入的攻击。

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

于 2013-07-09T13:09:47.687 回答