Pid*_*dge 27 php mysql database csv import
我在尝试从CSV导入数据时遇到了一些问题,并且有一些问题,我还没有设法自己解决.
首先,这是我的代码,以帮助把事情放在透视中(整理一下,删除CSS和数据库连接):
<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>
Run Code Online (Sandbox Code Playgroud)
它基本上是我在各种方法多次尝试后发现的一个例子的改编.
我的CSV有两列数据,第一列是文本,第二列是整数数据库中的表也有两列,第一列称为"文本",第二列称为"数字"
所以我的问题是:
我认为这涵盖了一切,提前感谢任何帮助!
编辑:
刚刚完成了10,000条记录上传的测试并得到了错误:
"致命错误:超过30秒的最大执行时间"
有什么想法吗?
SDC*_*SDC 69
前几天我回答了一个几乎完全相同的问题:将CSV文件保存到mysql数据库中
MySQL有一个功能LOAD DATA INFILE
,它允许它直接在单个SQL查询中导入CSV文件,而不需要通过PHP程序循环处理它.
简单的例子:
<?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);
?>
Run Code Online (Sandbox Code Playgroud)
就这么简单.
没有循环,没有大惊小怪.和很多很多比PHP解析它更快.
MySQL手册页:http://dev.mysql.com/doc/refman/5.1/en/load-data.html
希望有所帮助
$i=0;
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
if($i>0){
$import="INSERT into importing(text,number)values('".$data[0]."','".$data[1]."')";
mysql_query($import) or die(mysql_error());
}
$i=1;
}
Run Code Online (Sandbox Code Playgroud)