富山もやっと春めいてきた。休日になるとスタッドレスのタイヤをノーマルタイヤに履き返るときの,レンチがコンクリート地面にあたる「カン」という音が響く。それから家々では,冬の間積雪から木々を守った雪囲い(ゆきがこい)をはずし出す。

 その他にも「明日の朝,雪がたくさん積もっていたら,どうやって学校へ行こうか」という自転車通学の中高生も早起きから解放される。「仕事で帰りが遅くなって,路面が凍結してたら,やだな」という警戒も,もうしなくてもいい。

 柔らかな日差しの中で,背負っているものをいくつかおろしてもいいよと感じさせてくれる北陸の春はいいものだ。しかし近年は,困ったことに花粉が列を成して出番を待っている。

 3月5日,6日とこうしろうは二日連続でPHPの勉強をすることになった。前回から一カ月近く日が空いたので復習に手間取ったためと,もう一つPHPの学習を邪魔するものがあった。

 Apacheが起動しないのだ。「こうしろう,最近何かソフトウエア入れたか?」と聞くが,「何も入れとらん」とらちがあかない。「ああ,Skype入れたわ」と電話より高品質とも言われるボイスチャットソフト(http://web.skype.com/home.ja.html)の名前が出てくるまでに時間がかかった。そういえば,時おり夜更けに,こうしろうの部屋から友だちと会話する大きな声が聞こえてくることがあった。

 SkypeがHTTPの80ポートを占有していたのだ。Skypeの常駐ソフトを落とすとApacheが起動した。

 こうしろうはMySQLデータベースのテーブルからフィールドの定義情報を取得し,tableタグで表示するプログラムを作ってみた。

----------------------------------------------------------

<html>
<head><title>getbook.php</title></head>
<body>
<?php
$conn = mysql_connect("localhost","localuser","localpass");
if ($conn == False) {
 print ("can not connect db\n");
 exit;
}
mysql_select_db("rensyu",$conn);
$sql = "select * from book_table order by bid";
$res = mysql_query($sql,$conn);
$fields=mysql_num_fields($res);              (1)
while($row=mysql_fetch_array($res)){
 print("<table border=1>");
 for ($i=0;$i<$fields;$i++){
  print("<tr>");
  print("<td>".mysql_field_name($res,$i)."</td>");   (2)
  print("<td>".mysql_field_flags($res,$i)."</td>");   (3)
  print("<td>".mysql_field_type($res,$i)."</td>");   (4)
  print("<td>".mysql_field_len($res,$i)."</td>");    (5)
  print("<td>".$row[$i]."</td>");            (6)
  print("</tr>");
 }
 print("</table>");
 print("<br>");
}
mysql_free_result($res);
mysql_close($conn);
?>
</body>
</html>

----------------------------------------------------------
 (1)のmysql_num_fields関数は結果セットのフィールド数を取得する。(2)のmysql_field_name関数は結果セットとフィールドのインデックスを引数に取り($res,$i),フィールド名を取得する。(3)のmysql_field_flagsはnot_nullなどの属性を返し,(4)のmysql_field_typeは型を,(5)のmysql_field_lenはフィールド長を返す。(6)はフィールド値の取得である。

 レコードごとにフィールドの定義と値を表示しているので,何がしたいのかわかりにくい表示結果になったが,入力フォームからテーブルにデータを登録するときの文字数のチェックを,定数と比較するのではなく,テーブル定義情報をあらかじめ取得しておいて,チェックするなどといった使い方が考えられる。