goo blog サービス終了のお知らせ 

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

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

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へ
にほんブログ村


PHPによるMySQLへの接続方法

2020年05月13日 | PHP/MySQL

昨日のBlogにも書きましたが、現在PHPとMySQLを使用して、とある団体のユーザー認証サーバーを構築してます。

本日はPHPからMySQLへの認証方法についての備忘録です。

 

MySQLデータベースの操作APIは、mysqliを使用。

現在PHPからのMySQL APIの主流は使いやすいPDO(PHP Data Object)のようですが、私は過去のmysql構文を

引き継いだmysqliの方がしっくりくる(馴染みがある)ので、mysqli(の手続き型)を使ってます。

*mysqliの先代となるmysqlは、PHP5.5以降は非推奨となり、PHP7.0以降はAPI自体が削除されてます。

 

//MySQLへの接続開始

*mysqli_connectを使います。サーバー名、ログイン名、パスワード、データーベース名(注意:テーブル名では無い)を入力。


$connect = mysqli_connect("MySQL_ServerName", "Login_UserName", "Login_Password", "DatabaseName");

 
 
//接続状態を確認
mysqli_connect_errno()にて、直前の接続コールに対するエラーコードを返り値を読み取ります。
 以下のif文では、エラーがあればtrueとなり、エラーコードを表示しています。
 PHPのdieコマンドは、メッセージを表示後、プログラムを終了させます。

if (mysqli_connect_errno()) {
  die("MySQLデータベースに接続できません:" . mysqli_connect_error() . "\n");
} else {
  echo "MySQLデータベースの接続に成功しました。";
}

 
 
//データの取り出し
* mysqli_queryを使いデータ操作を行います。今回はMySQLのSELECTを使いデーターテーブルから指定する
 columnデータ(email, member_nameなどの情報)を全て抜き出します。
 抜き出されたデータは$outputに格納されます。
* mysqli_fetch_assocを使い、$outputに格納されたデータを連想配列で取得し、$eachdataに格納します。

$data = "SELECT email, password, member_name, member_data FROM DataTableName;";
if ($output = mysqli_query($connect, $data)) {
  while ($eachdata = mysqli_fetch_assoc($output)) {
    echo "$eachdata["email"]";
    echo "$eachdata["password"]";
    echo "$eachdata["member_name"]";
    echo "$eachdata["member_data"]";
  }
}

 
 
//MySQLからの接続解
* mysqli_closeを使い、MySQLサーバーとの接続を切断します。

mysqli_close($connect);

 

PHPを学ぶためのお勧めの書籍を紹介!

マイナビ出版:よくわかるPHPの教科書

PHPを学ぶ入門書としてお勧めです。

プログラムの考え方の基礎から、PHPの基礎、MySQLのデーターベースの基本を学び、

後半は、Webアプリケーション(掲示板)を作成する内容が記載されてます。

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

MySQLでデータをソートして読み込む

2020年05月11日 | PHP/MySQL

現在PHPとMySQLを使用して、とある団体のユーザー認証サーバーを構築してます。

秘匿性の無い情報を扱うのでセキュリティはケアせず、PHP/MySQLで各メンバーのユーザー名とパスワードを登録し、

ログインできるような環境を構築します。今回MySQLを使用するのが初めてなので備忘録として残します。


<今回のポイント>

サーバーに登録されたユーザー名を一覧で表示する際、ソートして表示したい。

 

<MySQLコマンド>

データの読み出しはSELECTを使用します。ORDER BY ...を使用することで読み出すデータをソートします。

データーベースのテーブル"TableName"からuser_nameとpasswordを読み出し、user_nameにて昇順にソートするコードです。

$query = "SELECT user_name, password FROM TableName ORDER BY user_name ASC;";

* user_nameとpasswordは読み出すデータに置き換え。

* TableNameも読み出すデーターベースのテーブル名に置き換え。

* PHPプログラム上で使用するコードです。

* 最後のASCは昇順での読み出し、これをDESCに変更すると降順での読み出しとなります。

 ASCは、昇順の英単語ascending orderの頭3文字

 DESCは、降順の英単語descending orderの頭4文字

 

もし、ID, user_name, passwordを読み出し、IDにて降順にソートする場合は以下となります。

$query = "SELECT ID, user_name, password FROM TableName ORDER BY ID DESC;";

 


PHP/MySQLを学び始めにお勧めの書籍を紹介!

マイナビ出版:PHP7 + MariaDB / MySQLマスターブック

PHP基礎、MySQLサーバー構築、また、応用としてPHP/MySQLを使用した実際のデーターベース構築まで掲載された書籍。

当方がメインで使用しているmysqliではなく、PDO(PHP Data Object)を利用したデータベース操作がメインとなってるが、

セキュリティ技術の箇所は有益な内容です。

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