【发布时间】:2012-07-11 23:52:54
【问题描述】:
我在尝试从 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 有两列数据,第一列是文本,第二列是整数 数据库中的表也有两列,第一列叫“文本”,第二列叫“数字”
所以我的问题是:
- 正在上传的文本在每个字段中都显示为 0,我不知道为什么
- 我一直在阅读有关以“”结尾的数据,如果发生这种情况,我将如何对其进行排序?
- 如何忽略标题等 CSV 的前 X 行?
- 在整个过程中数据格式是否发生了变化,还是可以在图表中使用?例如小数一旦放入数据库中会一直保持小数吗?
我认为这涵盖了所有内容,在此先感谢您的帮助!
编辑:
刚做了10000条记录上传测试,报错:
“致命错误:超过 30 秒的最大执行时间”
有什么想法吗?
【问题讨论】:
-
如果您要上传大文件,也请查看Load Data Infile,因为它更快。
LOAD DATA INFILE '/tmp/test.txt' INTO TABLE test IGNORE 1 LINES; -
@Fluffeh 我尝试使用该方法,但由于某种原因,当我将其合并到 PHP 中时它不起作用。速度肯定会很有用,因为它最终会是一个大文件。
-
检查我更新的答案。
-
@Pidge:
LOAD DATA INFILE在 PHP 中效果很好:我有它为我工作,几乎可以立即加载 300,000 行的 CSV 文件。它非常灵活,速度非常快,让任何基于 PHP 循环的解决方案都显得很傻。 -
@Pidge:csv 导入主要由 cron 完成,因此您可以使用任何方法。
标签: php mysql database csv import