我在嘗試從CSV導入數據時遇到了一些問題,並且有一些問題尚未解決。使用PHP/MySQL導入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>
它基本上與實施的適應我很多很多的嘗試後發現以各種方法。
我的CSV有兩列數據,第一個是文本,第二個是整數 在數據庫中的表也有兩列,第一個所謂的「文本」,第二個「數字」
所以我有問題是:
- 只是被顯示爲在各個領域的0文本被上傳,我不知道爲什麼
- 我繼續閱讀關於結束了數據附上「」,如果出現這種情況我將如何分類?
- 我該如何忽略頭文件等CSV的前X行?
- 是在整個過程中更改的數據格式,還是可以在圖形中使用?例如一旦放入數據庫中,小數會保留一位小數嗎?
我認爲這涵蓋了一切,預先感謝任何幫助!
編輯:
剛剛做了萬載紀錄的試驗,得到了錯誤:
「致命錯誤:最長30秒的執行時間超過了」
有什麼想法?
如果您要上傳大文件,也看看[LOAD DATA INFILE(http://dev.mysql.com/doc/refman/5.1/en/load-data.html)作爲它更快。 'LOAD DATA INFILE'/tmp/test.txt'INTO TABLE test IGNORE 1 LINES;' – Fluffeh 2012-07-12 09:01:53
@Fluffeh 我嘗試過使用該方法,但由於某種原因,當我將它合併到PHP中時,它不起作用。速度肯定會很有用,因爲它最終會成爲一個大文件。 – Pidge 2012-07-12 09:08:00
檢查我的更新答案。 – jit 2012-07-12 09:22:43