誰でもできる電子工作・プログラミング趣味ブログ

電子工作とプログラミングを趣味にする人口を増やすため、
誰でもできる電子工作とプログラミングを紹介します。

PHPにてMySQLデータをCSVに出力する

2020年05月16日 | PHP/MySQL

今回は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ファイルがダウンロードできるようになります。

 

にほんブログ村 IT技術ブログ MySQLへ
にほんブログ村



最新の画像もっと見る

コメントを投稿