Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 上载CSV文件时的迭代无法打印所需输出_Php_Mysql - Fatal编程技术网

Php 上载CSV文件时的迭代无法打印所需输出

Php 上载CSV文件时的迭代无法打印所需输出,php,mysql,Php,Mysql,我有这个代码,我用它来上传一个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, use

我有这个代码,我用它来上传一个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]上的每个数据,因此我回显每个拥有该用户id的人的名字,但显然这是错误的,因为没有打印任何内容


另外,请注意,我是唯一一个上传数据的人,我不关心安全问题。

做了很多PHP数据库方面的工作,但对mysql不太关心。你会认为你用双引号围绕ID字符串写select语句的方式应该是另一种方式吗?即,对查询字符串使用双引号,并对ID值使用单引号:

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

您可能想尝试一些调试—例如将print\u r$放入行;进入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());
}

仅用于演示,我仅打印了第一列的值。如果您想知道数据数组的完整结构,可以通过取消对print\r块的注释来实现。函数mysql\u real\u escape\u string将安全地将csv数据插入数据库表,如果不使用此函数,如果csv数据包含单引号或双引号,则mysql查询很可能会失败。

我猜问题出在这里:所以我回显每个拥有该用户id的人的名字。。。我假设ID是主键。因此,只有一条记录具有给定的ID主键。是的,但csv中将有不同的ID,因此我需要找到每个ID的名字。数据库是否接收csv中的所有插入?是的,它接收!它需要所有数据为什么要运行$import查询两次?select使用列ID而$row引用是$row['user_ID']这一事实是否与此相关?这两列都存在吗?对不起,意思是说它不应该是$name=$row['first_name'];然后echo Name=$Name\n;