如何将MySQL表的当前快照存储到CSV文件中(创建后)?

时间:2010-03-24 15:30:53

标签: php csv

我有大型数据库表,大约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文件,所以基本上这种方法,

  1. PHP脚本必须创建一个CSV文件。
  2. 对数据库执行Select查询。
  3. 将选择查询结果存储到CSV文件中。
  4. 执行此类任务的最佳或有效方式是什么?

    任何建议!!!

1 个答案:

答案 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);