使用 PHP 将查询结果保存到 .csv

Save query results to .csv with PHP

我有以下查询 运行,我正在寻找将数据导出到 .csv 或 .xls 文件的最佳方法。

<?php

    $channels = ee()->db->select('channel_titles.entry_id, channel_titles.title, channel_data.field_id_164')
    ->from('channel_titles')
    ->join('channel_data', 'channel_titles.entry_id = channel_data.entry_id')
    ->where(array(
            'channel_titles.channel_id' => '12',
        ))
    ->or_where(array(
            'channel_titles.channel_id' => '31',
        ))
    ->get();

    if ($channels->num_rows() > 0)
    {
        $i = 0;
        foreach($channels->result_array() as $row)
        {
            $i++;
            echo $row['field_id_164'].",".$row['title']."<br />\n";
        }
        echo $i;
    }       

?>

我尝试了几种方法,但似乎无法找到最佳选择。

经典的 echo explode(',',$col) 等方法很好,但您也可以使用 php 的内置函数直接写入 csv 文件。

    $filename = 'test.csv';
    $file = fopen($filename,"w");
    if ($channels->num_rows() > 0) {
        foreach($channels->result_array() as $key => $row) {
            if ($key==0) fputcsv($file, array_keys((array)$row)); // write column headings, added extra brace
            foreach ($row as $line) {
                $line = (array) $line;
                fputcsv($file, $line);
            }
        }
    }   

    fclose($file);

编辑:

如果你想download/view文件立即你必须设置headers。

    $filename = 'test.csv';

    header('Content-type: application/csv');
    header('Content-Disposition: attachment; filename=' . $filename);
    header("Content-Transfer-Encoding: UTF-8");

    $file = fopen('php://output', 'a');
    if ($channels->num_rows() > 0) {
        foreach($channels->result_array() as $key => $row) {
            if ($key==0) fputcsv($file, array_keys((array)$row)); // write column headings, added extra brace
            foreach ($row as $line) {
                $line = (array) $line;
                fputcsv($file, $line);
            }
        }
    }  

    fclose($file);