上传CSV文件时无法打印期望的输出


Iteration when uploading CSV file not able to print desired output

我有这个代码,我用它来上传一个CSV文件。

$handle = fopen($_FILES['filename']['tmp_name'], "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    $import="INSERT into matching(date, time, location, epos_id, rbpos_id, type_of_payment, basket_information, user_id, points) values('$data[0]', '$data[1]', '$data[2]', '$data[3]', '$data[4]', '$data[5]', '$data[6]', '$data[7]', '$data[8]')";
    mysql_query($import) or die(mysql_error());
    $query = 'SELECT * FROM users WHERE ID="'.$data[7].'"';
    $result = mysql_query($query) or die(mysql_error());
    while($row = mysql_fetch_array($result)){
        $id_user = $row['user_id'];
        $phone = $row['phone'];
        echo $name = $row['first_name'];
    }
    mysql_query($import) or die(mysql_error()); 
}
fclose($handle);

现在,我需要迭代列$data[7]上的每个数据,所以我回显拥有该user_id的每个人的名字,但显然这是错误的,因为没有打印任何内容。

p。请注意我是唯一上传数据的人,我不关心安全问题或其他问题。

做了很多PHP数据库的东西,但没有太多的mysql。有没有想过你用双引号括住ID字符串的方式应该是另一种方式?例如,使用双引号括括ID值的查询字符串:

$query = "SELECT * FROM users WHERE ID='".$data[7]."'";

你可能想尝试一些调试-比如输入print_r($row);进入while循环

我提交样例代码从csv文件读取数据。我假设您已经使用move_uploaded_file命令编写了上传csv文件的精确代码。所以我的示例代码从那个点开始。

// Set path to CSV file
$csvFile = 'test.csv';
$file_handle = fopen($csvFile, 'r');
//fgetcsv($file_handle);//skips the first line while reading the csv file, uncomment this line if you want to skip the first line in csv file
while (!feof($file_handle) )
{
    $csv_data[] = fgetcsv($file_handle, 1024);
}
fclose($file_handle);
/*echo '<pre>';
print_r($csv_data);
echo '</pre>';*/
foreach($csv_data as $data)
{
    echo "<br>column 1 data = ".$data[0];
    //Your insert will go something like this
    $import="INSERT into matching(date, time, ..) values('".mysql_real_escape_string($data[0])."', '".mysql_real_escape_string($data[1])."',....)";
    mysql_query($import) or die(mysql_error());
}

对于demo,我只打印了第一列的值。如果想知道数据数组的完整结构,可以取消print_r块的注释。函数mysql_real_escape_string将安全地插入csv数据到数据库表中,如果你不使用这个函数,如果你的csv数据包含单引号或双引号,那么你的mysql查询很可能会失败。