来自上传的CSV文件的多条记录,仅返回一个数组

时间:2017-03-13 05:37:08

标签: php mysql

需要一些帮助。 我上传了一个包含多个记录/行的CSV文件,并希望使用php和mysql将其插入数据库。 请看一下csv。 enter image description here

正如您所看到的,有三条记录我想要获取并插入到我的桌面上。

然而,当我上传这个文件时,它只返回一个数组。 这是回报:

["1","1","1234","12\/1\/2017\r2","2","5678","12\/25\/2018\r3","3","13323","1\/1\/2020"]

任何人都可以帮助我吗? 这是我的代码:

 if(isset($_POST["Import"])){

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


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

                    $sql = "INSERT INTO cardtbl    (cardid,cardno,cardpin,expdate,datecreated) 
                    VALUES     ('".$getData[0]."','".$getData[1]."','".$getData[2]."','".$getData[3]."','".$today."')";
                   // $result = mysql_query($sql);

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

             fclose($file); 
         }
    }

谢谢!

2 个答案:

答案 0 :(得分:0)

LOAD DATA INFILE "csv_file_path"
INTO TABLE table_name
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;

如果您不想对数据执行任何操作,则可以使用上面的SQL查询插入表中。你可以拿出&#34; IGNORE 1 LINES&#34;查询中的字符串,如果您的文件没有标题。这将解决您的问题。

答案 1 :(得分:0)

似乎PHP无法正确检测到行结束,期望\n并且CSV文件具有\r文件结尾(从12/1/2017可以看出) \ r 2)。

根据php文档https://secure.php.net/manual/en/function.fgetcsv.php,您应该使用文件顶部的auto_detect_line_endings启用ini_set("auto_detect_line_endings", true);