Вместо того, чтобы устанавливать значения $ строки в $ 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 в значение строки, фактически ничего не делая с ним. Каждая строка перезаписывает предыдущую, поэтому, когда вы делаете echo $ data, вы выводите последнее значение, которое было установлено, в вашем случае это было значение "time of entry" последних циклов.
Что касается добавления «имен строк», то в настоящее время код вводит значение, а затем новую строку. Возможно, вы захотите заменить "\ n" на ",", чтобы данные зацикливались на одну строку, а затем перед закрытием цикла while выведите "\ n", чтобы вставить символ новой строки. Затем вы можете поместить заголовки таким же образом, используя эхо и разделенные запятыми заголовки, за которыми следует символ новой строки.
Например
echo $row['pain'].",";
echo $row['sleep'].",";
echo $row['mood'].",";
echo $row['heartrate'].",";
echo $row['time_of_entry'].",";
echo "\n";