использование fputcsv возвращает только одну строку данных для экспорта

У меня есть код, который экспортируется в файл csv. Я подключился к базе данных и увидел, что там было более 30 записей или около того. Но я получаю только один в файле csv. Верхняя часть получает заголовки для файла, а нижняя — значения, массив значений возвращает только один массив и помещает его в файл. Я не уверен, что вызывает эту проблему. Мы будем очень признательны за любые предложения.

<?php
$FileName = "mro_export_".date("Y-m-d_H-i",time()).".csv";
$file = fopen($FileName,"w");

$sql = mysql_query("SELECT * FROM `$table` LIMIT 11");
$row = mysql_fetch_assoc($sql);
// Save headings alon
$HeadingsArray=array();
foreach($row as $name => $value){
    $HeadingsArray[]=$name;
}
fputcsv($file,$HeadingsArray);
$ValuesArray=array();
foreach($row as $name => $value){
    $ValuesArray[]=$value;
}
fputcsv($file,$ValuesArray);
fclose($file);

header("Location: $FileName");
?>

person Alex Howell    schedule 16.08.2014    source источник
comment
Вы вызываете mysql_fetch_assoc() только один раз, поэтому вы получаете только одну строку из БД.   -  person Barmar    schedule 16.08.2014
comment
К вашему сведению, ваши две петли foreach эквивалентны $HeadingsArray = array_keys($row) и $ValuesArray = array_values($row).   -  person Barmar    schedule 16.08.2014


Ответы (1)


Вам нужно вызвать mysql_fetch_assoc в цикле, чтобы получить все строки.

<?php
$FileName = "mro_export_".date("Y-m-d_H-i",time()).".csv";
$file = fopen($FileName,"w");

$sql = mysql_query("SELECT * FROM `$table` LIMIT 11") or die(mysql_error());
$first_line = true;
while ($row = mysql_fetch_assoc($sql)) {
    if ($first_line) {
        // Save headings alon
        fputcsv($file, array_keys($row));
        $first_line = false;
    }
    fputcsv($file, array_values($row));
}
fclose($file);

header("Location: $FileName");
?>
person Barmar    schedule 16.08.2014