見出し画像

【PHP】データをCSVファイルでダウンロードする方法

今回はPHPにて、データベースのデータをCSVファイルでダウンロードする方法を記載します。

データベースの準備

データベースに下記テーブルを作成します。

画像1

下記コマンドを実行します。

CREATE TABLE sample (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(128),
price VARCHAR(128),
date DATETIME NOT NULL
)ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;


下記コマンドでサンプルデータを3件登録します。

INSERT INTO sample (title, price, date) VALUES 
('いちご', '100', now()),
('メロン', '200', now()),
('スイカ', '1000', now());

下記作成されます。

画像2


一覧画面にダウンロードリンクを表示する

一覧画面を作成し、ダウンロードリンクを表示させます。

list.phpを作成し、下記記載します。

<table>
  <thead>
      <tr>
          <th>ID</th>
          <th>タイトル</th>
          <th>価格</th>
          <th>日付</th>
      </tr>
  </thead>
  <tbody>
      <?php
          foreach ($result as $row){
              print "<tr>";
              print "<td>".$row['id']."</td>";
              print "<td>".$row['title']."</td>";
              print "<td>".$row['price']."</td>";
              print "<td>".$row['date']."</td>";
              print "</tr>";
          }
      ?>
  </tbody>    
</table>

<a href="csv.php">csvダウンロード<a>

下記のように表示されます。

スクリーンショット 2019-10-15 5.38.52


ダウンロード実装ファイルの作成

次に、csvダウンロードリンクをクリックしたときの実装ファイルを作成します。

csv.phpを作成し、下記記載します。

<?php
$today = date("YmdHis");

// 出力情報の設定
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=".$today.".csv");
header("Content-Transfer-Encoding: binary");

//DB接続
$user = 'test';//データベースユーザ名
$password = 'test1234';//データベースパスワード
$dbName = "sample";//データベース名
$host = "sp_db_1";//ホスト


try {
  // MySQLへの接続
  $dsn = "mysql:host={$host};dbname={$dbName};charser=utf8";
  $pdo = new PDO($dsn, $user, $password);
  $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
       
  $sql = "SELECT * from sample";
  $stm = $pdo->prepare($sql);
  $stm->execute();
  $result = $stm->fetchAll(PDO::FETCH_ASSOC);
     
  // 接続を閉じる
  $stm = null;
 
} catch (PDOException $e) { // PDOExceptionをキャッチする
  print $e->getMessage() . "<br/gt;";
  die();
}

// 1行目を作成
$row = '"ID","タイトル","価格","日付"' . "\n";
foreach ($result as $value ){
   $row .= '"' . $value['id'] . '","' . $value['title'] . '","' . $value['price'] . '","' . $value['date'] . '"' . "\n";
}

print $row;

return;
?>


これで、list.phpの「csvダウンロード」をクリックするとcsvファイルがダウンロードできるようになります。

スクリーンショット 2019-10-15 5.46.44


GitHubリポジトリ

今回作成したソースはGithubにて公開しています。下記リンクよりご確認ください。(L7ブランチです。)


読んでいただきありがとうございます。