我想上传一个csv文件到数据库,每个文件有10k条记录。
当我运行代码时,它工作正常并完美地将记录插入数据库,但是一旦执行了所有查询并插入了所有记录,服务器就会给我一个错误:"MYSQL GONE AWAY"
我正在使用 jquery 表单提交数据,当我在没有 ajax 和 jquery 的情况下运行代码时,同样的事情发生了。
这是什么问题,请告诉我。
我想要发生的是当所有记录都被插入时,服务器就不会显示错误
这是。
$filenamecheck = 'resources/'. $_FILES["file"]["name"];
if (file_exists($filenamecheck)) {
echo "3";
die;
} else {
ini_set('post_max_size', '256M');
ini_set('upload_max_filesize', '256M');
ini_set('max_execution_time', 0);
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"];
}
else
{
$filename=$_FILES["file"]["name"];
$ext=substr($filename,strrpos($filename,"."),(strlen($filename)-strrpos($filename,".")));
if($ext==".csv")
{
$fileupload = move_uploaded_file($_FILES["file"]["tmp_name"],'resources/'. $_FILES["file"]["name"]);
$uploadfile = "resources/".$filename;
$file = fopen($uploadfile, "r");
$flag = true;
while (($emapData = fgetcsv($file, 10000, ",")) !== FALSE)
{
if($flag) { $flag = false; continue; }
$coderandom = $this->generateRandomString();
$securitycode = $this->generateSecurityCode();
$nam = explode(" ",$emapData[0]);
$user = explode("@",$emapData[3]);
$data = array(
'uFname' => $nam[0],
'uLname' => $nam[1],
'uTitle' => $emapData[1],
'uCompany' => $emapData[2],
'uEmail' => $emapData[3],
'uPassword' => md5($coderandom),
'uUsername' => $user[0],
'uPhone' => $emapData[4],
'uStatus' => 1,
'joinDate' => date("Y-m-d"),
'uCode' => $coderandom,
'ufb' => 0,
'uReCode' => $securitycode,
);
$this->admin_model->add_table_simple('dev_web_user',$data);
unset($emapData);
}
fclose($file);
echo "1";
} else {
echo 'Only .CSV File allowed!';
}
}
}
最佳答案
服务器丢弃了太大的数据包。如果 mysqld 收到一个太大或不正确的数据包,它会假定客户端出现问题并关闭连接。要修复,您可以增加 my.cnf 文件中的最大数据包大小限制 max_allowed_packet(位置因 Linux 版本而异),例如。设置
max_allowed_packet = 128M
然后重启你的MySQL服务器:
/etc/init.d/mysqld restart
关于php - 上传 csv 文件数据后服务器崩溃或 mysql 出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42249794/