Php mysql中csv批量插入的限制
我有一个csv文件上传功能。如果csv有近30000行,则功能正常。但每当csv文件的行数超过30k时,大容量插入就不起作用。下面是我读取csv并插入到表中的代码Php mysql中csv批量插入的限制,php,mysql,csv,Php,Mysql,Csv,我有一个csv文件上传功能。如果csv有近30000行,则功能正常。但每当csv文件的行数超过30k时,大容量插入就不起作用。下面是我读取csv并插入到表中的代码 $csvfile = fopen($file, 'r'); $i = 0; $data4 = ""; while (!feof($csvfile)) { $csv_data[] = fgets($csvfile, 1024); $csv_array = explode(";", $csv_data[$i]);
$csvfile = fopen($file, 'r');
$i = 0;
$data4 = "";
while (!feof($csvfile))
{
$csv_data[] = fgets($csvfile, 1024);
$csv_array = explode(";", $csv_data[$i]);
$data4.= "('".$csv_array[2]."', '".$csv_array[4]."', '".$csv_array[0]."','".$csv_array[1]."'),";
}
$i++;
fclose($csvfile);
$data4 = substr($data4,0,-1);
$sql = "INSERT INTO csv_table(`column1`,`column2`,`column3`,`column4`) VALUES $data4";
mysqli_query($mysqliConn,$sql);
只有当我的记录超过30000条时,我才有问题。请建议我在这里换车。
提前感谢专业提示:当然,“不工作”可能意味着“我的服务器起火,我的数据中心被烧毁”到“我的所有值都更改为42
,”再到“操作没有影响”。请理解您的错误。检查像mysqli\u query()
这样的操作返回的错误
话虽如此
您正在将整个CSV文件的内容拼凑成一个文本字符串。当csv文件太长时,该方法可能会失效
MySQL查询的长度有一个限制。它很大,但不是无限的,它由服务器参数和服务器配置设置。读这个
php也可能会耗尽内存
如何修复?处理你的CSV文件不是一次处理完,而是分成50行左右。一旦你读了50行,做一个插入
Pro提示2:清理输入数据。如果有人在上传的CSV文件中放入这样一行,您的表会发生什么情况
"bwahahahaha!'; -- DROP TABLE csv_table;", "something", "somethingelse"
你可能没事。但是你想冒这样的风险吗
请注意,公共网络上到处都是网络罪犯,如果你让它运行,几天后就会有人发现并利用这种漏洞。尝试检查错误,例如查找。除此之外,我们还需要知道它是如何工作的。我在这里使用jquery文件上传,只是我得到了内部服务器错误500A 500错误是一个通用的错误消息,几乎涵盖了脚本中可能出现错误的每一件事。请查看服务器错误日志以了解确切的错误消息。一个内部系统将生成此csv,因此不会发生这种情况。恕我直言,这将是@user3408779的著名遗言。好的,我同意你所说的