gpt4 book ai didi

php - 使用php将csv数据导入mysql数据库

转载 作者:可可西里 更新时间:2023-11-01 07:47:44 25 4
gpt4 key购买 nike

您好,我需要导入一个 15000 行的 csv 文件。我正在使用 fgetcsv 函数并解析每一行..但我每次都会收到超时错误。过程太慢,数据只导入了一部分。有什么办法可以让数据导入更快更高效?

if(isset($_POST['submit']))
{

$fname = $_FILES['sel_file']['name'];
$var = 'Invalid File';
$chk_ext = explode(".",$fname);

if(strtolower($chk_ext[1]) == "csv")
{

$filename = $_FILES['sel_file']['tmp_name'];
$handle = fopen($filename, "r");
$res = mysql_query("SELECT * FROM vpireport");
$rows = mysql_num_rows($res);
if($rows>=0)
{
mysql_query("DELETE FROM vpireport") or die(mysql_error());

for($i =1;($data = fgetcsv($handle, 10000, ",")) !== FALSE; $i++)
{
if($i==1)
continue;
$sql = "INSERT into vpireport
(item_code,
company_id,
purchase,
purchase_value)
values
(".$data[0].",
".$data[1].",
".$data[2].",
".$data[3].")";
//echo "$sql";
mysql_query($sql) or die(mysql_error());
}
}

fclose($handle);
?>
<script language="javascript">
alert("Successfully Imported!");
</script>
<?

}问题是每次它卡在导入过程之间并显示以下错误:

错误 1: fatal error :第 175 行超过 30 秒的最大时间限制。

错误 2:

您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在第 1 行的“S”,0,0)'附近使用的正确语法

我无法检测到这个错误...

文件每次都只导入部分.. 10000 行中只有大约 200 300 行..

最佳答案

您可以为每 500 行 csv 构建一个批量更新字符串,然后如果您在每行上执行 mysql 插入,则立即执行它。会更快。

另一种解决方案是读取带有偏移量的文件:

  1. 阅读前 500 行,
  2. 将它们插入数据库
  3. 重定向到 csvimporter.php?offset=500
  4. 返回第 1 步,这次读取从偏移量 500 开始的 500 行。

另一种解决方案是将超时限制设置为 0:

set_time_limit(0);

关于php - 使用php将csv数据导入mysql数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10662775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com