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