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

标签 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 循环时遇到了困难,因此非常感谢任何有关如何实现此目的的帮助。

最佳答案

检查你的 php.ini 文件 查找搜索最大值和折痕值,例如 最大执行时间 最大输入时间 最大输入变量 最大输入变量 post_max_size upload_max_filesize

关于php - 使用 PHP/PDO 将大型 MySQL 表导出为 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38152125/

相关文章:

php - mod_php 与 mod_python

mysql - 在 MYSQL 中保存 CSV 的最佳方式是什么?

php - 声明常量时,PHP语法错误

PHP session 不工作/SSL 问题?

mysql - 缓慢的 MySQL InnoDB 插入和更新

mysql查询基于前一行的值

java - 如何设计java的基本框架来测试包含10万条记录的制表符分隔的文本文件

python - pandas 比 ETL 的 csv 模块更高效吗

javascript - ajax 成功中的 Ajax 调用不起作用

mysql - SQL Server 数据类型