使用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