Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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插入mysql并使用AJAX查看进度_Php_Mysql_Ajax_Csv - Fatal编程技术网

Php 将多行从csv插入mysql并使用AJAX查看进度

Php 将多行从csv插入mysql并使用AJAX查看进度,php,mysql,ajax,csv,Php,Mysql,Ajax,Csv,我有一个超过10000行或记录的CSV文件。我已经知道如何在MySQL中插入它们。我想要的是有一个交互式通知,告知到目前为止插入了多少行或列 例如: 插入10000行中的100行 我尝试使用AJAX,下面是我的代码 function insert_logs(filename) { //alert("Inserting Data!!!" + filename); var ajax = new XMLHttpRequest(); ajax.onreadystatechange

我有一个超过10000行或记录的CSV文件。我已经知道如何在MySQL中插入它们。我想要的是有一个交互式通知,告知到目前为止插入了多少行或列

例如:

插入10000行中的100行

我尝试使用AJAX,下面是我的代码

function insert_logs(filename) {
    //alert("Inserting Data!!!" + filename);
    var ajax = new XMLHttpRequest();
    ajax.onreadystatechange=function() {
        if (ajax.readyState==4 && ajax.status==200) {
            _("logStatus").innerHTML = ajax.responseText;
        }
    }
    ajax.open("GET","insert_logs_module.php?fileName="+filename,true);
    ajax.send();
}
下面是我的insert_logs_module.php代码:

if (file_exists ( $targetFile)) {

    $data = fopen( $targetFile , 'r' );

    $numRows = count(file($targetFile,FILE_SKIP_EMPTY_LINES));

    /*$sql = mysql_query( "select * from logs where vessel_token = '" . $vessel_token . "'") or die("Error Select Logs - " . mysql_error());

    if( mysql_num_rows( $sql ) > 0 ){
        mysql_query("delete from logs where $vessel_token = '" . $vessel_token . "'" ) or die("Error Vessel Delete - " . mysql_error());
    }
    */
    $processRowCount = 0;
    $csvContent = fgetcsv( $data, 1000, "," );
    $traj_id = 0;
    $previousDate = 0;
    while( $csvContent = fgetcsv( $data, 1000, "," ) )
    {
        $ts = strtotime($csvContent[2]);
        $date =  date('Y/m/d',$ts);
        $logged_day = date('l',$ts);
        if ($previousDate != $date)
        {
            $traj_id++; 
        }
        $lat = $csvContent[2];
        $lon = $csvContent[1];
        $logged_at = $csvContent[3];

        mysql_query("insert into logs (vessel_token,traj_id,lat,lon,logged_at,logged_day) values ('" . $csvContent[0] . "','" . $traj_id . "','" . $lat . "','" . $lon . "','" . $logged_at . "','" . $logged_day . "');") or die("Error Insert - " . mysql_error());
       $previousDate = $date;
       $processRowCount++;
       $percent = ($processRowCount/$numRows) * 100;
       echo "$percent-$processRowCount of $numRows Records Processed!";
    }
} else {
        echo "File Does Not Exists! $targetFile";   
}

多谢各位

只需上传一个csv文件并在文件mysql fn中使用Load

form.php

 <form enctype="multipart/form-data" method="post" action="upload.php">
 Send this file: <input name="uploadedfile" type="file" /><br />
 <input type="submit" value="Send File" />
 </form>
upload.php

    <?php
    $con = mysqli_connect("localhost","my_user","my_password","my_db");
    $target_path = "";
    $target_path = $target_path . basename( $_FILES['uploadedfile']['name']); 

    if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
        $file_name = $_FILES['uploadedfile']['name'];  
        echo "The file ".basename($file_name)." has been uploaded";  
        mysqli_query($con,"LOAD DATA LOCAL INFILE '$file_name' INTO TABLE test FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n'");
    } else {
        echo "There was an error uploading the file, please try again!";
    }
    ?>

您当前使用的方法将占用资源

尝试使用2个AJAX调用,一个用于插入数据并设置计数变量。另一个用于检查后端检索count变量的第一个ajax调用的进度。不要忘记将第二个ajax调用设置为一个间隔,可能是一秒或一半。

使用mysql的文件加载功能。不要使用mysql扩展谢谢Indra的回复,但是你能告诉我更多吗?很抱歉,我刚刚开始开发网站。谢谢。问题是文件名的路径,因为它搜索的文件不在我的uploads文件夹中,但load data Inflie使用mysql\data?更新了我的答案的路径。如果可行,请投票并接受作为答案