我有大型数据库表,大约5GB,现在我想使用"Select * from MyTableName"
获取数据库的当前快照,使用PDO
中的PHP
与数据库进行交互。所以准备一个查询然后执行它
// Execute the prepared query
$result->execute();
$resultCollection = $result->fetchAll(PDO::FETCH_ASSOC);
不是一种有效的方法,因为大量内存是用户存储到大约为5GB
的关联数组数据中。
我的最终目标是将Select
查询返回的数据收集到CSV文件中,并将CSV文件放在客户端可以获取它的FTP位置。
我认为应该做的其他选择:
SELECT * INTO OUTFILE "c:/mydata.csv"
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY "\n"
FROM my_table;
但是我不确定这是否会起作用,因为我有cron启动整个过程并且我们没有csv文件,所以基本上这种方法,
执行此类任务的最佳或有效方式是什么?
任何建议!!!
答案 0 :(得分:0)
您可以使用php函数fputcsv (see the PHP Manual)将单行csv写入文件。为了不遇到内存问题,只需选择它然后迭代结果,而不是一次获取整个结果集:
$fp = fopen('file.csv', 'w');
$result->execute();
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
// and here you can simply export every row to a file:
fputcsv($fp, $row);
}
fclose($fp);