数据库
首页 > 数据库> > 使用php将csv数据导入mysql数据库

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

作者:互联网

嗨,我需要导入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:
致命错误:第175行超过30秒的最长时间限制.

错误2:

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第1行的’S’,0,0)附近使用正确的语法

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

该文件每次都是部分导入的..大约200 300行中的200 300行.

解决方法:

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

另一种解决方案是使用偏移量读取文件:

>阅读前500行,
>将它们插入数据库
>重定向到csvimporter.php?offset = 500
>返回1.步骤并读取此次以偏移500开始的500行.

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

set_time_limit(0);

标签:php,mysql,fgetcsv
来源: https://codeday.me/bug/20190716/1480874.html