2021.02.28
【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行ずつ連想配列として取得する。
- カラム名をキーとし、連想配列からデータを取得することができる。
一見難しそうですが、使う場面はだいたい同じような書き方になるので、パターンとして書き慣れてしまうのが手っ取り早いです。