首页 > 解决方案 > 在mysql中插入来自CSV的10000行数据而不跳过任何行

问题描述

我需要通过插入查询将我的 CSV 数据插入 mysql。目前我的 CSV 有 9976 行数据。但是在运行查询后,9-10 行会在 1000 行之后随机跳过,并且很难找出跳过了哪些行。

首先,我尝试访问该文件夹,然后访问该文件并将 csv 第一行作为我的表头。然后运行查询以在 mysql 中插入数据,但它跳过了一些随机行。

    $dir = "C:\Users\\".strtolower($username)."\Downloads";
    $fp = opendir($dir);
    $dates = array();
    $latest_file = glob($dir."\\Filter_ Tempo-jql-AP*");
    closedir($fp);
    $filepath=$latest_file[0];
    $the_big_array = [];
    $tablename="aht_tracker";
    $dbname="ford_resource_capacity";
    $conn =mysqli_connect("localhost","root","","$dbname") or die(mysqli_connect_error());
    $fields="";
    $fields1="";
    $fieldsinsert="";
    if (($h = fopen("{$filepath}", "r")) !== FALSE)
    {
        if (($data = fgetcsv($h, 100000, ",")) !== FALSE)
        {
            $issuekey=array_search("Issue key", $data);
            $hours=array_search("Hours", $data);
            $username=array_search("Username", $data);
            $issuetype=array_search("Issue Type", $data);
            $workdescription=array_search("Work Description", $data);
            $new_array=array($issuekey,$hours,$username,$issuetype,$workdescription);
            $arr_count=count($new_array);

            $c=0;
            $fieldsinsert .='(';
            foreach ($new_array as $key => $value)
            {
                $fieldsinsert .=($key==0) ? '' : ', ';
                $fieldsinsert .="`".str_replace(" ","_",$data[$value])."`";
                $fields .="`".str_replace(" ","_",$data[$value])."` varchar(250) DEFAULT NULL,";
            }
            $fieldsinsert .= ')';
        }
        while(($data = fgetcsv($h, 100000, ",")) !== FALSE)
        {

            $fieldsInsertvalues="";
            $c=0;
            foreach ($new_array as $key => $value)
            {
                $fieldsInsertvalues .=($key==0) ? '(' : ', ';
                $fieldsInsertvalues .="'".$data[$value]."'";
            }
            $fieldsInsertvalues .= ')';
            $sql1 = "INSERT INTO ".$tablename." ".$fieldsinsert."VALUES".$fieldsInsertvalues;
            mysqli_query($conn,$sql1);
        }
        fclose($h);
        //unlink($filepath);
    }

给我看一些代码,它可以帮助我从 csv 数据中插入我的所有行,或者让我知道是否可以在 500-500 数据包中插入 csv 数据。

标签: phpmysql

解决方案


https://dev.mysql.com/doc/refman/8.0/en/load-data.html

执行 MySQL 命令更有效。从 CSV 导入数据。您可以指定 Container、Separator 和其他东西。


推荐阅读