2014-11-02 19 views
0

我想將從網站下載的數據存儲到我的mysql數據庫中。PHP。將下載的csv傳輸到mysql數據庫 - 如何將下載的csv文件存儲在php內存中

我用我的功能 「CallAPI(」 GET 「$網址,$數據= FALSE)」 使用的URL,例如 「http://www.xflow1.com/xGlobalHist.csv/」 來訪問數據庫...

因此,我調用$結果= CallAPI ($ method,$ url,$ data = false);返回保存在變量「$ results」中的逗號分隔數組。我可以在網頁中顯示$結果,並向我顯示數據,所有逗號都是分隔的。所有的好,直到這裏。

添加到CSV上傳到我的mysql數據庫我想用「LOAD DATA INFILE」功能,像這樣:

$upload = <<<eof 
LOAD DATA INFILE $results 
INTO TABLE X_Adjusted_All 
FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
IGNORE 1 LINES 
(Cusip, Date, Price) 
eof; 

的障礙出現的「LOAD DATA INFILE $結果」不作爲LOAD DATA工作INFILE只需要一個文件名,所以我想將$結果作爲csv文件存儲在內存中,以避免始終創建和刪除文件。我認爲這可能有效:

$fp = fopen('php://memory', 'w'); 
fputcsv($fp, $results); 

唉,有沒有人有任何想法如何將下載的csv文件作爲csv文件保存到phps內存以便在LOAD DATA INFILE函數中使用?

+0

你有沒有原因不使用普通文件? – andy 2014-11-02 11:57:50

+0

你不能用PHP分配一部分內存,然後讓MySQL使用LOAD DATA INFILE讀取它。你可以做什麼,如果你的表現達到這個水平 - 創建一個RAM驅動器並將csv文件保存在那裏。然後讓MySQL讀取它。 – 2014-11-02 12:00:08

+0

@Andy的反思我認爲我的問題是,我可以下載數據罰款時,我調用該行中的函數:$結果= CallAPI(「GET」,$ url,$ data = false),但我不能做任何與變量$結果中的後續數據。我只是不知道如何將$結果保存爲csv文件。 – Mark 2014-11-02 12:48:20

回答

0

MySQL無法直接從PHP內存中讀取。您需要使用tempnam()創建一個外部文件。那個文件可以被MySQL讀取。您也可以創建一個臨時文件並找出this question中提到的文件名。

tempnam()的例子顯示瞭如何寫入該文件:

<?php 
$tmpfname = tempnam("/tmp", "FOO"); 

$handle = fopen($tmpfname, "w"); 
fwrite($handle, $results); 
fclose($handle); 

// do something 

unlink($tmpfname); 

這將在$results的內容存儲到一個名爲$tmpfname文件,你可以在MySQL中使用LOAD DATA INFILE $tmpfname存儲。

正如在評論中提到的,如果性能是一個問題,您可以創建一個ram驅動器來存儲該文件。

相關問題