我有一个包含超过10,000行或记录的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";
}
非常感谢!
答案 0 :(得分:0)
只需上传一个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!";
}
?>
您当前使用的方法将占用资源
答案 1 :(得分:0)
尝试使用2个AJAX调用,一个用于插入数据并设置计数变量。另一个用于检查后端上第一个ajax调用的进度,检索计数变量。不要忘记把第二个ajax呼叫放在一个间隔,可能是一秒钟或者一半。