0

CSV にエクスポートする適切な方法に関する多くの投稿を目にしますが、ほとんどの開発者は使用することを推奨しています。fputcsv()

以下のスクリプトをどのように変換して使用しますfputcsvか? テーブルの列名を反映するヘッダー行もエクスポートしていることがわかります。これを保持したいと思います。

<?php

    $sql = "SELECT * FROM `tbl_customers`";
    $result = mysql_query($sql, $dbdata_conn) or die(mysql_error());


    $header = $csv_output = '';
    $fields = mysql_num_fields($result);
    for ($i = 0; $i < $fields; $i++) {
        $header .= mysql_field_name($result, $i) . ",";
    }
    $header .= "\n";

    while ($rowr = mysql_fetch_row($result)) {
      for ($j=0; $j<$i; $j++) {
        $csv_output .= $rowr[$j].", ";
          }
     $csv_output .= "\n";
    }

    $csv_output = $header.$csv_output;

    header("Content-type: text/x-csv");
    header("Content-Disposition: attachment; filename=test.csv");
    header("Pragma: no-cache");
    header("Expires: 0");
    print "$csv_output";
    exit;   

?>

非推奨であることは承知しているmysql_queryので、これは練習用です。

補足として、私は に慣れていませんfputcsvが、csv 出力のデータをフォーマットするのに便利で、すべてのエスケープなどで時間を節約できることを読んでいます。(私はまた、上記の改善に対して非常にオープンです)

4

2 に答える 2

1

簡単なデモンストレーション(mysql_*関数に従う):

$header=array();
$fields = mysql_num_fields($result);
for ($i = 0; $i < $fields; $i++) {
    $header[] = mysql_field_name($result, $i);
}
header("...");
$f=fopen("php://output","wt");
fputcsv($f,$header);
while ($row = mysql_fetch_row($result)) {
    fputcsv($f,$row);
}
fclose($f);

あなたが述べたように、mysql_*関数は非推奨になっているので、あなたもそれに取り組むべきです。

于 2013-01-24T05:29:07.760 に答える
0

添付ファイルとしてダウンロードする場合は、fputcsv()を使用しなくてもかまいませんが、使用する場合の回避策は次のとおりです。

$sql = "SELECT * FROM `tbl_customers`";
$result = mysql_query($sql, $dbdata_conn) or die(mysql_error());

$header = array();
$csv_output = array();
$fields = mysql_num_fields($result);
for ($i = 0; $i < $fields; $i++) {
    $header[] = mysql_field_name($result, $i);
}
$csv_output[] = $header;

while ($rowr = mysql_fetch_array($result)) {
    $csv_output[] = $rowr;
}

$fp = fopen('/path/to/file.csv', 'w');  
foreach ($csv_output as $line) {
    fputcsv($fp, $line);
}
fclose($fp);    

// if you pick up the file from the directory manually, the following is not needed
header("Content-type: text/x-csv");
header("Content-Disposition: attachment; filename=test.csv");
header("Pragma: no-cache");
header("Expires: 0");

print file_get_contents('/path/to/file.csv');
unlink('/path/to/file.csv');
exit;   
于 2013-01-24T05:33:50.403 に答える