不将查询结果放入内存的方式导出excel,适用于当查询结果太大时

10 篇文章 0 订阅
        $sql = ''; // sql语句 自己填充
        $link = mysqli_connect(DB_HOST,DB_USER, DB_PWD, DB_NAME); // 数据库链接  配置信息自己填充
        mysqli_set_charset($link, 'utf8');
        $result = mysqli_query($link, $sql);
        $header = array(
            'id' => 'ID',
            'click_date'  => '点击日期',
            'app_id'  => '游戏ID',
            'channel_id'  => '渠道ID',
            'sub_channel_id'  => '子渠道ID',
            'ad_channel_id'  => '广告位ID',
            'ad_id'  => '广告ID',
            'imei'  => 'IMEI号',
            'click_time'  => '点击时间',
            'platform'  => '系统',
            'mac'  => 'MAC地址',
            'click_ip'  => '点击IP',
            'is_active'  => '是否激活',
        );
        ob_start(); // 打开缓冲区
        $filename = "clickLog_".$data['search_date'].'.csv';
        header("Content-Type: text/csv;charset=utf-8");
        header("Content-Disposition: attachment; filename={$filename}");
        header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
        header('Expires:0');
        header('Pragma:public');
        $tmp = array();
        foreach($header as $hInfo) {
            $tmp[] = iconv('utf-8','gbk',str_replace(",","",strip_tags($hInfo)));
        }
        echo '"\'' . implode('","\'', $tmp) . '"' . "\r\n";

        $i = 0;
        while($row = $result->fetch_array(MYSQLI_ASSOC)) {
            $tmp = [];
            foreach($header as $hk => $hInfo) {
                $value = empty($row[$hk]) ? "" : $row[$hk];
                $tmp[] = iconv('utf-8','gbk',str_replace(",", "",strip_tags($value)));
            }
            echo '"\'' . implode('","\'', $tmp) . '"' . "\r\n";
            $i++;
            if ($i % 500 == 0) {
                ob_end_flush(); // 每500条数据输出一次
            }
        }
        mysqli_free_result($result);
        mysqli_close($link);
        die();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值