尝试从CSV导入数据时遇到了一些问题,但还有一些问题,我还没有解决。
首先,这是我的代码,可以帮助您更好地了解事物(将其整理一些,删除CSS和DB连接):
<body> <div id="container"> <div id="form"> <?php $deleterecords = "TRUNCATE TABLE tablename"; //empty the table of its current records mysql_query($deleterecords); //Upload File if (isset($_POST['submit'])) { if (is_uploaded_file($_FILES['filename']['tmp_name'])) { echo "<h1>" . "File ". $_FILES['filename']['name'] ." uploaded successfully." . "</h1>"; echo "<h2>Displaying contents:</h2>"; readfile($_FILES['filename']['tmp_name']); } //Import uploaded file to Database $handle = fopen($_FILES['filename']['tmp_name'], "r"); while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $import="INSERT into importing(text,number)values('$data[0]','$data[1]')"; mysql_query($import) or die(mysql_error()); } fclose($handle); print "Import done"; //view upload form } else { print "Upload new csv by browsing to file and clicking on Upload<br />\n"; print "<form enctype='multipart/form-data' action='upload.php' method='post'>"; print "File name to import:<br />\n"; print "<input size='50' type='file' name='filename'><br />\n"; print "<input type='submit' name='submit' value='Upload'></form>"; } ?> </div> </div> </body>
从本质上讲,这是我对各种方法进行多次尝试后发现的示例的改编。
我的CSV有两列数据,第一列是文本,第二列是整数数据库中的表也有两列,第一列称为“文本”,第二列为“数字”
所以我的问题是:
我想涵盖了所有内容,在此先感谢您的帮助!
编辑:
刚刚对10,000条记录上传进行了测试,但出现错误:
“致命错误:超过30秒的最大执行时间”
有什么想法吗?
前几天,我回答了一个几乎相同的问题:将CSV文件保存到mysql数据库中
MySQL具有一项功能LOAD DATA INFILE,它允许它直接在单个SQL查询中导入CSV文件,而根本不需要通过您的PHP程序在循环中对其进行处理。
LOAD DATA INFILE
简单的例子:
<?php $query = <<<eof LOAD DATA INFILE '$fileName' INTO TABLE tableName FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' (field1,field2,field3,etc) eof; $db->query($query); ?>
就这么简单。
没有循环,没有大惊小怪。和很多 很多 比PHP解析它更快。
MySQL手册页在这里:http : //dev.mysql.com/doc/refman/5.1/en/load- data.html
希望能有所帮助