使用PHP / PDO将大型MySQL表导出为CSV

时间:2016-07-01 18:45:09

标签: php mysql csv pdo

我目前正在使用数组和fputcsv将MySQL表导出到csv文件。这很好用,但我有一个表太大(100,000 +行)这个方法,所以我的网站超时。

我目前的代码是;

<?php                                    
//open database connection                            
require ('../database-config.php');
header('Content-Type: text/csv');
header('Content-Disposition: attachment;filename=exported_archive_all.csv');

//SQL Query for Data
$sql = "SELECT * FROM inverter_data_archive;";        
//Prepare Query, Bind Parameters, Excute Query
$STH = $dbh->prepare($sql);
$STH->execute();

//Export to .CSV
$fp = fopen('php://output', 'w');

// first set
$first_row = $STH->fetch(PDO::FETCH_ASSOC);
$headers = array_keys($first_row);
fputcsv($fp, $headers); // put the headers
fputcsv($fp, array_values($first_row)); // put the first row

while ($row = $STH->fetch(PDO::FETCH_NUM))  {
fputcsv($fp,$row); // push the rest
}
fclose($fp);        
?>

我读过一个可能的方法是从查询结果集中单独读取每个数据行并直接写入php:// output,然后读取下一行等;而不是在内存中构建一个大型数组或构建csv。

我尝试了一些事情,但我为for循环而努力,所以对如何实现这一点的任何帮助都将非常感激。

1 个答案:

答案 0 :(得分:-1)

检查您的php.ini文件 查找搜索最大值和折痕值 的max_execution_time max_input_time设置 max_input_vars max_input_vars 的post_max_size 的upload_max_filesize