Php 如何将数据从MySQL导出到CSV?

Php 如何将数据从MySQL导出到CSV?,php,mysql,Php,Mysql,我正在尝试从一个网站使用PHP将数据从MySQL导出到CSV。当用户单击“生成报告”时,它将自动创建报告,并将其作为文件下载到其计算机上。下面的代码我一直在遵循一个在线教程,但我遇到了一些问题。目前,它将下载,但只显示MySQL数据中的一行和一个日期值 我想知道我需要做什么来显示csv文件中的所有数据,以及如何确保同时打印行的名称 @header("Content-Disposition: attachment; filename=record.csv"); $select = "SELECT

我正在尝试从一个网站使用PHP将数据从MySQL导出到CSV。当用户单击“生成报告”时,它将自动创建报告,并将其作为文件下载到其计算机上。下面的代码我一直在遵循一个在线教程,但我遇到了一些问题。目前,它将下载,但只显示MySQL数据中的一行和一个日期值

我想知道我需要做什么来显示csv文件中的所有数据,以及如何确保同时打印行的名称

@header("Content-Disposition: attachment; filename=record.csv");

$select = "SELECT * FROM DBtable WHERE user_id=$id";
$result2 = $conn->query($select);
while ($row = $result2->fetch_assoc()) {
    $data = $row['pain']."\n";
    $data = $row['sleep']."\n";
    $data = $row['mood']."\n";
    $data = $row['heartrate']."\n";
    $data = $row['time_of_entry']."\n";
}

echo $data;
exit();

您不应该将$row值设置为$data,而是应该回显

 @header("Content-Disposition: attachment; filename=record.csv");

 $select = "SELECT * FROM DBtable WHERE user_id=$id";
 $result2=$conn->query($select);
     while($row=$result2->fetch_assoc()){

      echo $row['pain']."\n";
      echo $row['sleep']."\n";
      echo $row['mood']."\n";
      echo $row['heartrate']."\n";
      echo $row['time_of_entry']."\n";

    }
     exit();
您的代码只是将$data设置为rows值,而没有实际使用它。每一行都会覆盖上一行,因此当您回显$data时,您会回显它设置的最后一个值,在您的情况下,该值是最后一个循环的“输入时间”值

至于添加“行的名称”,目前代码先输入一个值,然后是一个新行。您可能希望将“\n”替换为“,”,因此一个循环数据是一行,然后在结束while循环之前,回显“\n”以插入新行字符。然后,您可以使用相同的方式放置标题,使用回音和逗号分隔的标题,后跟新行字符

比如说

echo $row['pain'].",";
echo $row['sleep'].",";
echo $row['mood'].",";
echo $row['heartrate'].",";
echo $row['time_of_entry'].",";
echo "\n";

您不应该将$row值设置为$data,而是应该回显

 @header("Content-Disposition: attachment; filename=record.csv");

 $select = "SELECT * FROM DBtable WHERE user_id=$id";
 $result2=$conn->query($select);
     while($row=$result2->fetch_assoc()){

      echo $row['pain']."\n";
      echo $row['sleep']."\n";
      echo $row['mood']."\n";
      echo $row['heartrate']."\n";
      echo $row['time_of_entry']."\n";

    }
     exit();
您的代码只是将$data设置为rows值,而没有实际使用它。每一行都会覆盖上一行,因此当您回显$data时,您会回显它设置的最后一个值,在您的情况下,该值是最后一个循环的“输入时间”值

至于添加“行的名称”,目前代码先输入一个值,然后是一个新行。您可能希望将“\n”替换为“,”,因此一个循环数据是一行,然后在结束while循环之前,回显“\n”以插入新行字符。然后,您可以使用相同的方式放置标题,使用回音和逗号分隔的标题,后跟新行字符

比如说

echo $row['pain'].",";
echo $row['sleep'].",";
echo $row['mood'].",";
echo $row['heartrate'].",";
echo $row['time_of_entry'].",";
echo "\n";

将只显示一行。。。由于您正在一次又一次地覆盖
$data
,请将您的
回音
放入循环中谢谢您的响应,我现在在那里尝试了,它现在只打印出时间输入字段。您是否建议将所有不同的字段打印到csv文件中?我是新的编码。它现在只打印出输入的时间。。。当然是!您必须
echo
显示您想要显示的内容,将值分配给
$data
没有意义。直接回应他们。。。。建议将所有不同的字段打印到csv文件。。。这里有大量的例子和教程,它们只会显示一行。。。由于您正在一次又一次地覆盖
$data
,请将您的
回音
放入循环中谢谢您的响应,我现在在那里尝试了,它现在只打印出时间输入字段。您是否建议将所有不同的字段打印到csv文件中?我是新的编码。它现在只打印出输入的时间。。。当然是!您必须
echo
显示您想要显示的内容,将值分配给
$data
没有意义。直接回应他们。。。。建议将所有不同的字段打印到csv文件。。。这里有大量的示例和教程谢谢-我更改了代码,现在它将所有内容都打印在一列中。我添加了一个编辑,以防您希望数据排成一行,而不是一列。谢谢!真的很感谢你的帮助!谢谢-我更改了我的代码,现在它在一列中打印所有内容。我添加了一个编辑,以防您希望数据排成一行,而不是一列。谢谢!真的很感谢你的帮助!