【发布时间】:2014-12-29 04:59:20
【问题描述】:
我想将从网站下载的数据存储到我的 mysql 数据库中。
我使用我的函数 "CallAPI("GET", $url, $data = false)" 使用诸如 "http://www.xflow1.com/xGlobalHist.csv/" 之类的 url 访问数据库...
所以我的调用 $results = CallAPI($method, $url, $data = false);返回一个逗号分隔的数组,该数组保存在变量“$results”中。我可以在网页中回显 $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 $results”不起作用,因为 LOAD DATA INFILE 只需要一个文件名,所以我想将 $results 作为 csv 文件存储在内存中,以避免一直创建和删除文件.我认为这可能有效:
$fp = fopen('php://memory', 'w');
fputcsv($fp, $results);
唉,不。有谁知道如何获取下载的 csv 文件并将其作为 csv 文件保存到 phps 内存中,以便在 LOAD DATA INFILE 函数中使用?
【问题讨论】:
-
不使用普通文件有什么原因吗?
-
您不能使用 PHP 分配一部分内存,然后让 MySQL 使用 LOAD DATA INFILE 读取它。如果您达到该级别的性能,您可以做什么 - 创建一个 ram 驱动器并将 csv 文件保存在那里。然后让 MySQL 读取它。
-
@Andy 反思我认为我的问题是当我在行中调用函数时我可以很好地下载数据:$results = CallAPI("GET", $url, $data = false) ,但我无法对变量 $results 中的后续数据做任何事情。我只是不知道如何将 $results 保存为 csv 文件。
-
如 tempnam() 示例所示,请参阅更新后的答案。