我在尝试从CSV导入数据时遇到了一点问题,还有几个问题我还没有解决。
首先,这里是我的代码,以帮助把事情的Angular (整理了一下,删除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有两列数据,第一列是文本,第二列是整数。数据库中的表也有两列,第一列称为"文本",第二列称为"数字"
所以我的问题是:
1.正在上传的文本只是显示为0在每个字段,我不知道为什么
1.我一直读到数据最终被括在""中,如果发生这种情况,我将如何排序?
1.我怎样才能忽略头等CSV的前X行?
1.数据格式在整个过程中是否发生了变化,或者是否已准备好用于图表中?例如,小数一旦放入数据库中,是否仍将保持小数?
编辑:
刚刚完成了10,000条记录上传的测试,出现错误:
"致命错误:超过了30秒的最大执行时间"
有什么想法吗?
6条答案
按热度按时间nwo49xxi1#
前几天我回答了一个几乎相同的问题:Save CSV files into mysql database
MySQL有一个特性
LOAD DATA INFILE
,它允许它在单个SQL查询中直接导入CSV文件,而根本不需要通过PHP程序在循环中处理它。简单举例:
就这么简单。
没有循环,没有麻烦。而且比用PHP解析要快得多。
MySQL手册页:http://dev.mysql.com/doc/refman/5.1/en/load-data.html
希望能有所帮助
kt06eoxx2#
hk8txs483#
假设$infile = a. csv//文件需要导入。
希望这个能帮上忙。
zaq34kh64#
wa7juj8i5#
我认为解析csv时要记住的主要事情是它遵循一些简单的规则:
a)它是一个文本文件,因此很容易打开B)每行由行尾确定\n因此首先将字符串拆分为行c)每行/行具有由逗号确定的列,因此按逗号拆分每行以获得列数组
have a read of this post看看我在说什么
一旦你掌握了窍门,它实际上是非常容易做到的,而且会变得非常有用。
fdbelqdn6#
数据库连接:
读取CSV文件并上传到数据库表的代码。