0

我有此代码用于上传 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);

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

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

4

2 回答 2

0

做了很多 PHP 数据库的东西,但用 mysql 做的不多。是否会认为您在 ID 字符串周围使用双引号编写 select 语句的方式应该是相反的?即对查询字符串使用双引号,将单引号括起来作为 ID 值:

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

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

于 2013-06-18T21:37:32.870 回答
0

我正在提交示例代码以从 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());
}

仅用于演示,我只打印了第一列的值。如果您想知道数据数组的完整结构,可以通过取消注释print_r块来完成。函数mysql_real_escape_string将安全地将 csv 数据插入到数据库表中,如果您不使用此函数,如果您的 csv 数据包含中断查询的单引号或双引号,您的 mysql 查询很可能会失败。

于 2013-10-08T11:45:41.730 回答