今回はMySQLに登録されているデータをCSVに出力する方法を紹介します。
オプションとして、以下2点も付け加えます。
1.必要なデータ(例えば学校のデータだと学年毎の出力)のみを出力
2.データをソートして出力(例えば、学籍番号順)
//MySQLへの接続開始
$connect = mysqli_connect("MySQL_ServerName", "Login_UserName", "Login_Password", "DatabaseName");
//接続状態を確認
if (mysqli_connect_errno()) {
die("MySQLデータベースに接続できません:" . mysqli_connect_error() . "\n");
} else {
echo "MySQLデータベースの接続に成功しました。";
}
//出力するCSVファイルを準備します
$file_name = "student.csv"; //出力するCSVファイル名の定義
$data_title = ["学年", "名前", "学籍番号", "科目1", "成績", "科目2", "成績"]; //出力するテーブルのタイトルを定義
//文字化けを防止するため、文字エンコーディングを変更します
文字エンコーディングの変更は、mb_convert_encodingを使い、$dataの文字データを以下コマンドで変換。
使用例:mb_convert_encoding($data, "変換後の文字エンコーディング", "変換前の文字エンコーディング")
変換前の文字エンコーディングはautoで設定。autoは、"ASCII,JIS,UTF-8,EUC-JP,SJIS"の順番に自動検出します。
変換後の文字エンコーディングは、一度SJISを使用したが、"髙"などの環境依存文字が文字化けしたので、SJIS-winに変更。
foreach($data_title as $key => $data){
$header[] = mb_convert_encoding($data, 'SJIS-win', 'auto');
}
//ファイルを生成する
touch(ファイル名)コマンドを使いファイルを作成します。
touchコマンドの使い方はこちら→https://www.php.net/manual/ja/function.touch.php
ファイル作成後、$file->fputcsv($data)にて、先ほど作成したタイトル部分を格納します。
この$dataは配列(Array)とする必要があり、dataを単一の変数として定義した場合はPHPエラーになります。
if(touch($file_name)){
$file = new SplFileObject($file_name, "w");
$file->fputcsv($header);
}
//MySQLからのデータ取り出し
MySQLのSELECT分でデータを引き出します。ORDER BY *** ASCを使い、ソートを行います。
***はソートをかけたいデータ名を設定。
CSVへの出力は全データではなく一部のデータのみをCSVに出力したいので、一時的に配列変数を作成し格納します。
ここでも文字化けを防止するため、mb_convert_encodingを使い、文字エンコーディングをSJIS-winに変換。
$file->fputcsv($wdata);にてCSVに格納します。
$student_data = "SELECT year, name, number, subject1, grade1, subject2, grade2, subject3, grade3 FROM DataTableName ORDER BY number ASC;";
if ($output = mysqli_query($connect, $student_data)) {
while ($row = mysqli_fetch_assoc($output)) {
if($row['year'] == 3){ //3年生だけを抽出
$wdata = array(
1 => "$row['year']",
2 => "$row['name']",
3 => "$row['number']",
4 => "$row['subject3']",
5 => "$row['grade3']",
);
$wdata = mb_convert_encoding($wdata, "SJIS-win", "auto");
$file->fputcsv($wdata);
}
}
//MySQL接続解除
MySQLの接続を解除して終了
mysqli_close($connect);
これにより、PHPファイルが保存されているフォルダ内にstudent.csvが作成されました。
ページ内にこのファイルに対するリンクを配置すると、Web上からワンクリックでcsvファイルがダウンロードできるようになります。