PHP:将 MYSQL 查询写入 CSV

标签 php mysql csv mysqli php-stream-wrappers

我正在尝试将 MySQLi 查询写入可下载的 CSV。以下 header 打开 CSV 流:

$fileName = ''; //empty file name, file name is cast later
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");
$fh = @fopen( 'php://output', 'w' );

在此之下,我有以下尝试查询并将查询的每一行转换为 CSV 文件中的新行:

if(isset($_POST["Submit"]) && ($_POST['Weight'] == 'Weight')){
    $fileName .= 'OutputWeightNull.csv';
    $query = mysqli_query($conn, 'SELECT * FROM  `Some_Table` WHERE WEIGHT = 0 OR weight IS NULL')or die(mysql_error());
    $result = mysqli_fetch_array($query) or die(mysql_error());
    $headerDisplayed = false;
    foreach ($result as $data){
    if (!headerDisplayed){
    fputcsv($fh, array_keys());
    $headerDisplayed = true;
        }
        fputcsv($fh, $data);
    }
}

CSV 正在按需要下载到浏览器,但它显示为空,查询结果未发送到 CSV。谁能指出我正确的方向,说明为什么会这样。

这是我第一次尝试编写比 hello world 更复杂的 PHP 脚本。如果答案非常简单或显而易见,我们深表歉意。

最佳答案

清理代码以围绕返回的行循环,并使用 mysqli_ 错误函数:-

<?php 

if(isset($_POST["Submit"]) && ($_POST['Weight'] == 'Weight'))
{
    $fileName = ''; //empty file name, file name is cast later
    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");
    $fh = @fopen( 'php://output', 'w' );

    $fileName .= 'OutputWeightNull.csv';
    $query = mysqli_query($conn, 'SELECT * FROM  `Some_Table` WHERE WEIGHT = 0 OR weight IS NULL') or die(mysqli_error($conn));
    if ($result = mysqli_fetch_array($query, MYSQLI_ASSOC))
    {
        fputcsv($fh, array_keys($result));
        fputcsv($fh, $result);
        while ($result = mysqli_fetch_array($query, MYSQLI_ASSOC))
        {
            fputcsv($fh, $result);
        }
    }
}

关于PHP:将 MYSQL 查询写入 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33433737/

相关文章:

php - 无法使用 GnuPG 在 PHP 中加密

php - 使用php将excel文件中的数据导入到mysql表中

MongoDB - mongoexport 嵌套数组中的所有对象

php - codeigniter 加载一个模型,该模型具有带参数的构造函数

php 命令没有将我移动到下一页

mysql - 为什么 MYD 文件的大小这么大?

php - 自动获取mysql数据库中的数据到网站

mysql - 将DAO QueryDef保存到临时查询并将结果输出到Excel

mysql - 如果字段为空,则将 MySQL 行与前一行合并

php - Codeigniter 临时存储文件