【PHP基礎】データベースのデータをCSVで出力する方法
2019-08-20 808 1984データベースのデータをCSV出力する。
管理画面ではそこそこ需要のある機能。
今回はCSV出力のドシンプルなコードをコピペ用に残しておきます。
まずはじめに、CSVのことを難しく考えている方もいるかもしれないので、CSV形式についての説明をほんの数行でします。
CSVファイルはデフォルトでエクセルで開かれるので、エクセルデータだと思いがちですが、ただのテキストファイルです。例としまして、下記のようなカンマ区切りのテキストデータです。タブ区切りの場合もあります。
名前,英語,国語,数学メモ帳やテキストエディタに上記をコピペして、拡張子を.csvにして保存してみて下さい。エクセルで開くと、表の形になっているかと思います。CSVはエクセルで開けるだけで、エクセル形式のファイルではないということです!
Aさん,95,50,82
Bさん,39,47,97
Cさん,54,90,84
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を出力するデモ