2015-08-28 55 views
1

我想學習如何上傳新的記錄到MySQL表,但似乎失敗到目前爲止。我的嘗試:PHP的MySQL從CSV文件上載數據INFILE

$uploaded = $_FILES["fileupload"]["name"]; 
`$try = mysqli_query($connect,"LOAD DATA INFILE IGNORE $uploaded INTO TABLE allrecords");` 

我得到一個錯誤。預計雖然代碼是一團糟。我試着在谷歌搜索,但似乎只提供每個記錄一個接一個地插入數據庫。我使用標籤來選擇Excel CSV文件(從Excel導出),然後在接收的PHP文件中使用此查詢。

我使用LOAD DATA INFILE IGNORE,因爲我想將新記錄上傳到數據庫,但不包括數據庫中已存在主鍵的記錄。此外,我不知道如何做LOAD DATA INFILE並匹配每個字段。我是否需要重命名Excel CSV中的每個列名稱/標題以匹配數據庫中的字段名稱?

+0

發佈您的錯誤消息或堆棧跟蹤。 –

+1

我認爲他想要做的@TimBiegeleisen是圍繞'/ full/path/to/filename''圍繞單引號,並且具有諷刺意味的是不會忽略1行,並且調整第1行是完美的 – Drew

+0

@Drew發佈這個答案。 OP應該包含錯誤輸出。那麼我就不必瘋狂猜測了。 –

回答

1

由於在上面的評論中明智地提到了@drew,因此您在LOAD DATA聲明中忽略了文件名中的單引號,這可能會導致混亂。你可能也會失去一些其他的東西,它會阻止它的工作。

嘗試使用這個PHP代碼,而不是:

$uploaded = $_FILES["fileupload"]["name"]; 
`$try = mysqli_query($connect,"LOAD DATA INFILE IGNORE '$uploaded' INTO TABLE allrecords FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY ',,,\r\n'");` 

這裏是LOAD DATA命令作爲單獨的(讀取)查詢:

LOAD DATA INFILE IGNORE '$uploaded' 
INTO TABLE allrecords 
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '\"' 
LINES TERMINATED BY ',,,\r\n' 

仔細,在OPTIONALLY ENCLOSED BY雙引號必須是轉義因此PHP不會窒息。

作爲另一種評論,LOAD DATA在處理數據方面是相當原始的。它旨在將原始數據引入MySQL。爲了對原始數據進行復雜的過濾和處理,你最好在MySQL中正常工作。

+0

感謝Tim和Drew,I將現在嘗試這個並回到你:) –

+0

你是什麼意思,更好的做在MySQL本身的工作?你是說在一個循環中逐一插入每一行?我打算這樣做,但我認爲這會使流程運行非常緩慢? –

+0

我的意思是,如果您有選擇性地保留/排除某些記錄的複雜規則,那麼最好在一次讀取所有內容,然後清理MySQL中的表格,並在其中有大量工具來幫助您完成此操作。 –

相關問題