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

使用PHP/PDO将大型MySQL表导出为CSV,php,mysql,csv,pdo,Php,Mysql,Csv,Pdo,我目前正在使用数组和fputcsv将MySQL表导出到csv文件。这非常有效,但是我有一个表对于这个方法来说太大了(100000+行),所以我的站点超时了 我现在的代码是 <?php //open database connection require ('../database-config.php'); header('Content-Type: text/c

我目前正在使用数组和fputcsv将MySQL表导出到csv文件。这非常有效,但是我有一个表对于这个方法来说太大了(100000+行),所以我的站点超时了

我现在的代码是

<?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循环,因此非常感谢您提供有关如何实现这一点的任何帮助。

检查您的php.ini文件 查找搜索最大值和折痕值,如 最大执行时间 最大输入时间 最大输入变量 最大输入变量 贴纸最大尺寸 上传\u max\u filesize

检查您的php.ini文件 查找搜索最大值和折痕值,如 最大执行时间 最大输入时间 最大输入变量 最大输入变量 贴纸最大尺寸
上传_max_filesize

既然可以直接使用PHP,为什么还要这样做?那么...怎么样它对您有用吗?该页面上的示例仍然将整个表加载到一个数组中,因此会导致相同的内存/超时问题。如果可以直接使用PHP,为什么还要这样做?那么...怎么样它对您有用吗?该页上的示例仍然将整个表加载到一个数组中,因此会导致相同的内存/超时问题。。虽然这可以回答这个问题,但提供关于为什么和/或如何回答这个问题的附加上下文可以提高其长期价值。尽管不是我所寻找的PHP解决方案,但ini允许我将现有代码用于大型表。我在顶部添加了这两行<代码>ini_集('memory_limit','-1');ini_集('max_execution_time',0)。虽然这可以回答这个问题,但提供关于为什么和/或如何回答这个问题的附加上下文可以提高其长期价值。尽管不是我所寻找的PHP解决方案,但ini允许我将现有代码用于大型表。我在顶部添加了这两行<代码>ini_集('memory_limit','-1');ini_集('max_execution_time',0)