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

        $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();

猜你喜欢

转载自blog.csdn.net/qq_34092577/article/details/80425299