PHP データベース関連

[PHP] DBからCSVを生成してダウンロードする

2015年9月5日

画面から入力されたパラメータでMySQLを検索して、結果をCSVファイルとしてダウンロードするサンプルです。

サンプルソース

mst_syainテーブルから検索した結果をCSVとして出力するサンプルです。

【クライアント側 - HTML】(index.html)


<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title>CSVダウンロード</title>
  </head>
  <body>
    <form action="./csvdownload.php" method="post">
      部署CD:<input type ="text" name="busyo_cd" />
      <input type="submit" name="dlbtn" value="ダウンロード" />
    </form>
  </body>
</html>

【サーバ側 - PHP】(csvdownload.php)


<?php
 //DB接続情報
 $dsn = 'mysql:host=localhost;dbname=testdb';
 $id = 'root';
 $pw = 'pass';

 //画面からパラメータ取得
 $val = filter_input(INPUT_POST, "busyo_cd");

 if (isset($_POST["dlbtn"])) {
   try {
     //DB検索処理
     $pdo = new PDO($dsn, $id, $pw,
              array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
     $sql = "SELECT * FROM mst_syain WHERE busyo_cd  = :busyocd ";
     $stmt = $pdo->prepare($sql);
     $stmt->bindParam(':busyoco', $val, PDO::PARAM_STR);
     $stmt->execute();

     //CSV文字列生成
     $csvstr = "";
     while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
       $csvstr .= $row['syain_id'] . ",";
       $csvstr .= $row['syain_name'] . ",";
       $csvstr .= $row['busyo_cd'] . "\r\n";
     }

     //CSV出力
     $fileNm = "syain.csv";
     header('Content-Type: text/csv');
     header('Content-Disposition: attachment; filename='.$fileNm);
     echo mb_convert_encoding($csvstr, "SJIS", "UTF-8"); //Shift-JISに変換したい場合のみ
     exit();

   }catch(ErrorException $ex){
     print('ErrorException:' . $ex->getMessage());
   }catch(PDOException $ex){
     print('PDOException:' . $ex->getMessage());
   }
 }

検索するテーブルはこんな感じ。

【社員マスタ】
社員番号
(syain_id)
名前
(syain_name)
部署CD
(busyo_cd)
1 001 鈴木 02
2 002 佐藤 01
3 003 田中 03
4 004 高橋 03
5 005 山本 01

(結果)

結果

(syain.csv)
002,佐藤,01
005,山本,01

パラメータに"01"を指定した場合です。

関連記事

-PHP, データベース関連
-,