跳过第一行,使用PHP将csv上传到mysql

时间:2018-11-03 11:17:02

标签: php mysql sql database mysql-workbench

当我使用PHP将其上传到MySQL时,我想跳过CSV(标题部分)的第一行,但是它总是将第一行插入MySQL表中,并且也没有上传MySQL中的总记录。我的CSV中有1000条记录,但一次只能上传174条记录。我正在使用以下代码将CSV上传到MySQL。任何人都知道我在做什么错。

    <?php

include 'config.php';
$flag = true;
 if(isset($_POST["import"])){

        $filename=$_FILES["file"]["tmp_name"];      


         if($_FILES["file"]["size"] > 0)
         {
            $file = fopen($filename, "r");
            while (($getData = fgetcsv($file, 10000, ",")) !== FALSE)
             {

 if($flag)
  {
   $flag = false;
    continue;
     }
               $sql = "INSERT into tbl_customer(customer_name,customer_excise_code,city) 
                   values ('".$getData[0]."','".$getData[1]."','".$getData[2]."')";

                   $result = mysqli_query($conn, $sql);
                if(!isset($result))
                {
                    echo "<script type=\"text/javascript\">
                            alert(\"Invalid File:Please Upload CSV File.\");
                            window.location = \"index.php\"
                          </script>";       
                }
                else {
                      echo "<script type=\"text/javascript\">
                        alert(\"CSV File has been successfully Imported.\");
                        window.location = \"index2.php\"
                    </script>";
                }
             }

             fclose($file); 
         }
    }    


 ?>

1 个答案:

答案 0 :(得分:0)

您可以尝试以下建议:

  • if($flag) {...}之前检查文件中的空行
  • 您对isset()的检查将始终返回true,因为mysqli_query()返回布尔值或对象,因此您不知道该语句是否正确执行。您执行INSERT语句,在这种情况下,来自mysqli_query()的预期结果将是布尔值,因此只需检查$result

PHP:

<?php
$flag = true;
...

while (($getData = fgetcsv($file, 10000, ",")) !== FALSE) {
    if (is_null($getData[0])) {
        continue;
    }
    if ($flag) {
        $flag = false;
        continue;
    }
    ...

    $result = mysqli_query($conn, $sql);
    if (!$result) {
        ...
    } else {
        ...
    }   

    ...
}

...
?>