Php 将多行从csv插入mysql并使用AJAX查看进度
我有一个超过10000行或记录的CSV文件。我已经知道如何在MySQL中插入它们。我想要的是有一个交互式通知,告知到目前为止插入了多少行或列 例如: 插入10000行中的100行 我尝试使用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
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?更新了我的答案的路径。如果可行,请投票并接受作为答案