Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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 而使用fgetcsv循环仅在第一个实例上更新MySQL数据库_Php_Mysql_Csv_Fopen_Fgetcsv - Fatal编程技术网

Php 而使用fgetcsv循环仅在第一个实例上更新MySQL数据库

Php 而使用fgetcsv循环仅在第一个实例上更新MySQL数据库,php,mysql,csv,fopen,fgetcsv,Php,Mysql,Csv,Fopen,Fgetcsv,我将CSV文件拉入脚本,解析它,然后更新我的MySQL表。问题是它只插入CSV文件第二行的数据(第一行被跳过,因为它是列的标题)。这是我的密码: $f = fopen("sample.csv", "r"); while(($line = fgetcsv($f)) !== FALSE){ $time = $line[0]; //SKIP FIRST LINE (WITH HEADERS) if($time == "Time"){ continue;

我将CSV文件拉入脚本,解析它,然后更新我的MySQL表。问题是它只插入CSV文件第二行的数据(第一行被跳过,因为它是列的标题)。这是我的密码:

$f = fopen("sample.csv", "r");
while(($line = fgetcsv($f)) !== FALSE){
    $time = $line[0];

    //SKIP FIRST LINE (WITH HEADERS)
    if($time == "Time"){
        continue;
    }
    else{
        $size = $line[1];
        $location = $line[2];
        $county = $line[3];
        $state = $line[4];
        $lat = $line[5];
        $lon = $line[6];
        $comments = $line[7];
        $sql = "INSERT INTO sample (time, size, location, county, state, lat, lon, comments) VALUES ('$time', '$size', '$location', '$county', '$state', '$lat', '$lon', '$comments')";
        $result = $mysqli->query($sql);
        //CHECK TO SEE IF THE LOOP IS WORKING THROUGH ALL DATA
        echo $size;
    }
}
fclose($f);
问题是它成功跳过了第一行,然后在第二个循环中成功地更新了数据库。如您所见,我已经回显了$size的值,它回显了所有行的所有值,这意味着它正确地循环了所有数据。我不确定它为什么不将这些数据添加到后续的每一行中


谢谢你的帮助

您需要从文件中分离文本,请尝试以下操作:

while(($line = fgetcsv($f,4096,",", '"')) !== FALSE){

您甚至不检查sql语句是否成功。如果没有csv文件的内容示例,很难说我不喜欢使用头值进行检查,相反,如果标志为false,我会计数或使用标志插入数据库,否则不会,并在循环前将其设置为true,在循环内将其设置为false。标题可能会被更改,为什么要限制您的想象力。@arkascha,我运行脚本时正在phpMyAdmin中检查数据库。它成功地显示了表格中的第一行,但仅此而已……是的,很好,但这是你已经知道的。我问你为什么不检查sql语句是否成功。这意味着您不必运行一条语句,而是应该检查mysql在运行上一条语句之后是否返回了错误。有办法做到这一点:。而且,杜默你运行的所有语句当然是有意义的,因为它们显然是有缺陷的。如果你不去了解实际发生的事情,你会让自己陷入困境。相反,你只看最后的结果。你的确切意思是什么?当我运行当前脚本时,我成功地打印出了表的所有值,所以我相信它正确地拉出了文本?