ブログ

日々の開発で得た知見や、技術的な発見をアウトプットしていきます。フロントエンド開発を中心に、実装のヒントやトラブルシューティング、新しい技術の検証結果など、実践的な情報を発信。エンジニアとしての成長の記録であり、同じ課題に直面する方々への導きとなることを目指しています。

BLOG

MySQLからPHPでデータを取得してブラウザに表示する

今回は前回に引き続きMySQLからデータを取得する方法について書いていきます。

データベースとの接続がまだの方はこちらを先に見てください。

今回は'users'というテーブルを用意しました。

それぞれid、苗字、名前、メールアドレスのデータが入っています。

1、SQL文の準備

まずはSQL文の準備です。

このように書きます。

$sql = "SELECT * FROM テーブル名";

今回だとテーブル名の所には'users'が入ります。

'users' から(FROM) 全部のデータ(*) を取ってくる(SELECT)という意味になります。

その処理を$sqlに変数として入れてます。

2、SQL文の実行

SQL文の実行ですが前回同様PDOを使っていきます。

$stmt = $dbh->query($sql);

query()というメソッドを使ってデータベースに問い合わせる処理となります。

PDO::query() は、一回の関数コールの中で SQL ステートメントを準備して実行し、 結果を PDOStatement オブジェクトとして返します。

それを変数$stmtに入れていきます。

3、結果の取り出し

$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

結果を取り出すコードは上記になります。

今回はfetchAllというメソッドを使用しています。

PDOStatement::fetchAll — 結果セットから、残っている行を取得する。

その中のPDO::FETCH_ASSOCですが、これは連想配列として各行を返します。

これにより、結果セットが連想配列として取得され、id,last_name,first_name,emailといったキーでアクセスできるようになります。

実際に書いてみよう

前回までのコード

<?php
 $dsn = 'mysql:host=localhost;dbname=test;charset=utf8';
 $user = 'root'; // ここは設定したユーザーを入れてください
 $pass = 'root'; // ここは設定したパスワードを入れてください

 try {
    $dbh = new PDO($dsn,$user,$pass,[
       PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    ]);
    echo '接続成功';
    $dbh = null;
  } catch(PDOException $e) {
    echo '接続失敗'. $e->getMessage();
    exit();
  };

?>

上記が前回書いたコードです。

ここから続きを書くと

<?php
 $dsn = 'mysql:host=localhost;dbname=test;charset=utf8';
 $user = 'root'; // ここは設定したユーザーを入れてください
 $pass = 'root'; // ここは設定したパスワードを入れてください

 try {
    $dbh = new PDO($dsn,$user,$pass,[
       PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    ]);
    echo '接続成功';
    // SQLの準備
    $sql = 'SELECT * FROM users';
    // SQLの実行
    $stmt = $dbh->query($sql);
    // SQLの結果を受け取る
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
    var_dump($result);
    $dbh = null;
  } catch(PDOException $e) {
    echo '接続失敗'. $e->getMessage();
    exit();
  };

?>

このようになります。

var_dump()で見てみましょう。

ユーザーデータが配列で返ってきてますね。

この配列をforeachを使ってリストで表示したいと思います。

次のように書いてください。

<ul class="users-list">
    <?php foreach($result as $user): ?>
      <li>
        <p>No.<?php echo $user['id'] ?></p>
        <p>氏名:<?php echo $user['last_name'] ?> <?php echo $user['first_name'] ?></p>
        <p>メールアドレス:<?php echo $user['email'] ?></p>
      </li>
    <?php endforeach; ?>
  </ul>

これでユーザーの数だけリストが表示されます。

ユーザーの情報がリストで表示することができました!

お疲れ様でした!