結果セット
■概要
前回のSELECT文の続きになります。
前回は以下のようなサンプルプログラムを作成しました。
select.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <?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行ずつ連想配列として取得する。
- カラム名をキーとし、連想配列からデータを取得することができる。
一見難しそうですが、使う場面はだいたい同じような書き方になるので、パターンとして書き慣れてしまうのが手っ取り早いです。