我想将从网站下载的数据存储到我的mysql数据库中。
我使用我的功能" CallAPI(" GET",$ url,$ data = false)"使用" http://www.xflow1.com/xGlobalHist.csv/" ...
等网址访问数据库所以我的调用$ 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;
障碍出现在&#34; LOAD DATA INFILE $ results&#34;因为LOAD DATA INFILE只需要文件名,所以我想将$ results作为csv文件存储在内存中,以避免一直创建和删除文件。我认为这可行:
$fp = fopen('php://memory', 'w');
fputcsv($fp, $results);
唉不。有没有人知道如何获取下载的csv文件并将其作为csv文件保存到phps内存,以便在LOAD DATA INFILE函数中使用?
答案 0 :(得分: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
的文件中,您可以使用LOAD DATA INFILE $tmpfname
将其存储在mysql中。
如评论中所述,如果性能有问题,您可以创建一个ram驱动器来存储该文件。