加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

使用PHP/MySQL导出大型CSV数据的最佳方法是什么?

发布时间:2020-12-11 23:53:50 所属栏目:MySql教程 来源:网络整理
导读:我正在开发一个项目,我需要从包含近10k行的数据库中提取数据,然后将其导出为CSV.我尝试了下载CSV的常规方法,但即使我们已经将memory_limit设置为256MB,我也总是遇到内存限制问题. 如果您有任何人遇到同样的问题,请分享您对什么是最佳解决方案或方法的看法.

我正在开发一个项目,我需要从包含近10k行的数据库中提取数据,然后将其导出为CSV.我尝试了下载CSV的常规方法,但即使我们已经将memory_limit设置为256MB,我也总是遇到内存限制问题.

如果您有任何人遇到同样的问题,请分享您对什么是最佳解决方案或方法的看法.

真的很感激你的想法.

这是我的实际代码:

$filename = date('Ymd_His').'-export.csv';

//output the headers for the CSV file
header("Cache-Control: must-revalidate,post-check=0,pre-check=0");
header('Content-Description: File Transfer');
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename={$filename}");
header("Expires: 0");
header("Pragma: public");

//open the file stream
$fh = @fopen( 'php://output','w' );

$headerDisplayed = false;

foreach ( $formatted_arr_data_from_query as $data ) {
    // Add a header row if it hasn't been added yet -- using custom field keys from first array
    if ( !$headerDisplayed ) {
        fputcsv($fh,array_keys($ccsve_generate_value_arr));
        $headerDisplayed = true;
    }

    // Put the data from the new multi-dimensional array into the stream
    fputcsv($fh,$data);
}

// Close the file stream
fclose($fh);
最佳答案 如果你真的必须用PHP进行处理,你需要使用MYSQL的limit命令来获取你的数据子集.每次只抓取一定数量的行,将它们写入文件然后获取下一组.

您可能需要在查询循环中的一些变量上运行unset().关键是不要在内存中同时存在太多巨大的arrarys.

如果您正在抓取整个合并表,请按插入日期升序对其进行排序,以便第二次抓取将获得任何较新的项目.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读