【发布时间】:2012-05-19 06:07:30
【问题描述】:
您好,我需要导入一个 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)' 附近使用正确的语法
我无法检测到这个错误...
文件每次只导入部分.. 在 10000 行中只导入大约 200 300 行..
【问题讨论】:
-
如果您可以分享您的代码以及您正在处理的各种复杂情况,也许人们可以通过提出许多其他途径来做出更好的回应。
-
@somnath: 我已经添加了我的代码.. 我尝试了 set_time_limit(0) 但现在我遇到了一些 sql 语法错误..
-
set_time_limit() 与您遇到的错误无关。很可能您的代码没有进展到该代码并且由于提前达到 30 秒而过期!这是一个不同的错误,需要相应地解决。请在我的回答下方查看我的回复,了解我提出的一些建议。