【PHP基礎】データベースのデータをCSVで出力する方法

2019-08-20    55   94

データベースのデータをCSV出力する。
管理画面ではそこそこ需要のある機能。

今回はCSV出力のドシンプルなコードをコピペ用に残しておきます。

まずはじめに、CSVのことを難しく考えている方もいるかもしれないので、CSV形式についての説明をほんの数行でします。

CSVファイルはデフォルトでエクセルで開かれるので、エクセルデータだと思いがちですが、ただのテキストファイルです。例としまして、下記のようなカンマ区切りのテキストデータです。タブ区切りの場合もあります。

名前,英語,国語,数学
Aさん,95,50,82
Bさん,39,47,97
Cさん,54,90,84
メモ帳やテキストエディタに上記をコピペして、拡張子を.csvにして保存してみて下さい。エクセルで開くと、表の形になっているかと思います。CSVはエクセルで開けるだけで、エクセル形式のファイルではないということです!

CSVとはなんぞやということ知れば、もうデータベースのデータをCSVで出力するのは簡単なこと。
<?php
// データベースに繋いで配列にデータを格納
$list[0] = "名前,英語,国語,数学,備考\n";
$rst = $mysqli->query("SELECT * FROM `{$TB['seiseki']}`");
while($row = $rst->fetch_assoc()){
    $list[] = "{$name},{$eigo},{$kokugo},{$sugaku},\"{$remark}\",\n"; // ※1.備考欄は改行を可能に
}

// 配列のデータを一行ずつsjisに変換(※2.エクセルはUTF8が未対応の印象)
foreach($list as $row){
    $data .= mb_convert_encoding($row,"sjis","utf8")."\n";
}

// ファイルを書き込み
$file_name = 'log/demo.csv'; // ファイルパス
$fp = fopen($file_name, "w");
fwrite($fp,$data);
fclose($fp);

// ※3.HTTPヘッダを設定
header('Content-Type: application/octet-stream');
header('Content-Length: '.filesize($file_name));
header('Content-Disposition: attachment; filename=sample.csv');

// ファイル出力
readfile($file_name);
exit();
?>
上記のコードで要チェックの部分
※1. CSVデータの中に改行データを含める。クォーテーションで囲むだけです。
※2. CSVの文字コードはSJISにすると文字化けが起きにくいです。(エクセルの仕様によって変化)
※3. これについては何も考えずコピペする。filename(保存させる名前)はご自由に(^^)

あとはリンクでCSV出力しているPHPにリンクさせれば完了!
PHPでCSVを出力するデモ

カテゴリ: PHP

comment 登録なしでご自由にご入力いただけます(^^)ぜひぜひ記事のご感想をお聞かせ下さい。

お名前とコメントは入力必須です。

コメントの文字数が短すぎます。

この内容でコメントを送る
コメントをする
この記事がお役に立てましたら是非シェアのご協力お願いします。