【PHP】mysqli関数⑦ 結果セットの取得


結果セット

■概要

前回のSELECT文の続きになります。

前回は以下のようなサンプルプログラムを作成しました。
select.php

<?php

    // 接続処理
    $con = mysqli_connect('localhost', 'root', '', 'sample_db');
    if(!$con) {
        die('接続に失敗しました');
    }
    
    // 文字コード
    mysqli_set_charset($con, 'utf8');

    // SQLの発行と出力
    $sql = "SELECT * FROM members";
    $res = mysqli_query($con, $sql);
    while($row = mysqli_fetch_assoc($res)) {
        print_r($row);
        echo '<br>';
    }
    
    // 接続断
    mysqli_close($con);
?>

今回は15行目のwhile文の()の中、$row = mysqli_fetch_assoc($res)について説明していきます。

■結果セットとは

結果セットとは、SQLを発行した結果をプログラム側で表形式で取得したデータのことを言います。

しかし結果セットは表全体のことなので、格納されているデータ1つ1つにアクセスすることはできません。

そこでまず1行ずつにバラしましょう。
それが$row = mysqli_fetch_assoc($res)という処理です。

■mysqli_fetch_assoc関数

mysqli_fetch_assoc関数の引数に結果セットを渡すと、結果セットを1行ずつ連想配列として取得することができます。
結果セットの先頭行から順々に取得し、最終行まで取得するとNULLが返ってきてwhile文終了となります。
1行1行のデータが$rowに連想配列として格納されているので、値にアクセスしたい場合は、$row[‘カラム名’]でアクセスできます。

■サンプルプログラム改良版

前回のサンプルプログラムを改良し、今回は結果を表形式で出力してみましょう!

select_2.php

<?php

    // 接続処理
    $con = mysqli_connect('localhost', 'root', '', 'sample_db');
    if(!$con) {
        die('接続に失敗しました');
    }
    
    // 文字コード
    mysqli_set_charset($con, 'utf8');

    // SQLの発行と出力
    $sql = "SELECT * FROM members";
    $res = mysqli_query($con, $sql);

    echo "<table border='1'>";
    echo "    <tr>";
    echo "        <th>ID</th>";
    echo "        <th>名前</th>";
    echo "        <th>年齢</th>";
    echo "        <th>住所</th>";
    echo "    </tr>";

    while($row = mysqli_fetch_assoc($res)) {
        echo "<tr>";
        echo "  <td>{$row['id']}</td>";
        echo "  <td>{$row['name']}</td>";
        echo "  <td>{$row['age']}</td>";
        echo "  <td>{$row['address']}</td>";
        echo "</tr>";
    }

    echo "</table>";
   
    // 接続断
    mysqli_close($con);
?>

結果

これを利用すれば、データベースに登録されているデータを表形式で一覧として出力することができるようになります!

■まとめ

  • SELECT文の結果は、表形式で取得する。(結果セット
  • 結果セットはwhile文で1行ずつ連想配列として取得する。
  • カラム名をキーとし、連想配列からデータを取得することができる。

一見難しそうですが、使う場面はだいたい同じような書き方になるので、パターンとして書き慣れてしまうのが手っ取り早いです。

  • このエントリーをはてなブックマークに追加

PAGE TOP