在mysql中使用csv批量插入的限制

时间:2017-12-15 13:37:15

标签: php mysql csv

我有一个csv文件上传功能。如果csv有近30k行,则功能正常。但是每当csv文件的行数超过30k时,批量插入就无法正常工作。下面是我读取csv和插入表格的代码。

$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);

当我的记录超过30k时,我才会遇到问题。请在这里建议我更改。     提前致谢

1 个答案:

答案 0 :(得分:1)

专业提示:"不工作,"当然,可能意味着来自"我的服务器起火了,我的数据中心被烧毁了,"我的所有价值观都改为42,"到"手术无效。" 了解您的错误。检查来自mysqli_query() 等操作的错误。

有人说......

您正在整理您的整个CSV文件的内容并将其插入单个文本字符串中。当csv文件太长时,该方法很可能会失败。

MySQL查询的长度有限制。它很大,但不是无限的,它由服务器参数和服务器配置设置。读这个。 https://dev.mysql.com/doc/refman/5.7/en/packet-too-large.html

php也会耗尽内存。

如何解决?不是一次处理您的CSV文件,而是以五十行左右的方式处理。一旦你读了五十行,就做一个插入。

专业提示2: 清理您的输入数据。如果有人在上传的CSV文件中添加这样的行,您的表会怎样?

"bwahahahaha!'; -- DROP TABLE csv_table;", "something", "somethingelse"

你可能没事。但你想冒这样的风险吗?

请注意,公共网络正在爬行网络犯罪分子,如果您让它继续运行,有人会在几天内发现并利用此类漏洞。