PHPからのSQL実行
次に「search1.php」内の、SQL実行部分を見ていきます。
$sql = "SELECT * FROM restaurant"; $res = mysql_query( $sql ); if( $res == false ) { die("エラーが発生しました。"); }
上記の部分では、まず変数$sql
に前回勉強したSQLのSELECT
文を代入しています。その後、mysql_query
という命令を使用して、SQLを実行します。mysql_query
命令でSELECT
文を指定した場合、戻り値として「検索結果」が返ってきます。SQLがエラーの場合は、先ほどと同様「false
」という戻り値になり、続くif
文の条件に代入されプログラムが終了します。
検索結果である$res
という変数は、このまま
while( $row = mysql_fetch_array( $res ) )
の行で、mysql_fetch_array
という検索結果から1行ずつ取り出す命令に渡されます。
ここで、ある条件の間処理を繰り返すwhile
ループが出てきました。このループは、「検索結果から一行ずつ読み込んで、まだ読み込む行がある限り(つまり、全ての検索結果が読み込み終わるまで)繰り返す」という意味です。この書き方は検索結果を表示する際に使う定型句ですから、そのまま覚えてしまいましょう。例えばテーブル内に4店舗の情報があった場合、このループは4回繰り返され、$row
という連想配列に1行ずつ検索結果が代入されます。
ここで、連想配列$row
のキーはデータベースのカラム名となります。例えば、restaurant
テーブルのaddress
カラムを表示したいのであれば、print( $row["address"] );
と記述します。同様に、$row["name"]
や$row["price"]
と記述すれば、name
カラムやprice
カラムの値を表示することが可能です。
従ってPHPプログラムの
while( $row = mysql_fetch_array( $res ) ) { print("<tr>"); print("<td>" . $row["restaurant_no"] . "</td>"); print("<td>" . $row["address"] . "</td>"); print("<td>" . $row["name"] . "</td>"); print("<td>" . $row["price"] . "</td>"); print("</tr>\n"); }
の部分が、検索された店舗数分の情報を実際に画面に表示している箇所となります。print
命令の中で使われている「ドット(.
)」記号は、"<td>
"など変数以外の文字と、変数をつなげて表示するための記号です。表示している内容が分かり辛いようでしたら、画面のソースの表示を行い、実際に生成されたHTML
を確認してみてください。
<tr><td>1</td><td>渋谷</td><td>うさぎや</td><td>2500</td></tr> <tr><td>2</td><td>高円寺</td><td>パンケーキーズ</td><td>2000</td></tr> <tr><td>3</td><td>千葉</td><td>ビストロアーシュ</td><td>3500</td></tr> <tr><td>4</td><td>新宿</td><td>エスカルゴ</td><td>4000</td></tr> …
上記のようなHTML
が生成されていることが分かるはずです。<tr>
タグで囲まれた部分が一行を表し、<td>
タグで囲まれた文字が一つのセルを表します。このような構造をHTML
では「テーブル」と呼びます。テーブルについてより詳しく知りたい方は、The Web KANZAKI 「テーブル -- ごく簡単なHTMLの説明」のようなWebサイトを参考に調べてみてください。
検索結果の表示が終わったら、mysql_free_result
という命令を用い検索結果を抹消します。大きなサイトでは検索結果が膨大なレコード数になることもあり得ますから、PHPの負担が大きくならないよう、表示が終わったらきちんと抹消しなければなりません。それを行っているのが下記の1文です。
mysql_free_result($res);
最後に、以下の1文で mysql との接続を切断します。
mysql_close();