since 2002/01/01
lastupdate 2003/01/16
   

レコードの取得

データベースへ接続できたらレコードを取得してみましょう。


レコードの取得

さて、レコードの取得、というか SQL 文の発行には、pg_exec() を使います。
PHP では基本的に全て pg_exec() で SQL を発行します。 で、この関数により、SQL を発行したその結果セットを得ることが出来ます。

構文: 結果セット = pg_exec ( コネクションハンドル, SQL文 );

構文的にはこのようになります。例えばテーブル zaiko の全てのデータを取得するには...

----------------------------------------------------------------------------------------------------
  $con    = pg_connect("dbname=TEST") ; // データベースへ接続します
  $SQL    = "SELECT * FROM zaiko ;" ;
  $result = pg_exec( $con, $SQL ) ;     // SQL を発行し結果セットを得る
----------------------------------------------------------------------------------------------------

となります。これにより SELECT 文の結果が $result へ格納されま

レコードの表示

さて、実はこのままではデータを表示することは出来ません。 通常先の $result を、例えば echo した場合、Resource id #2 などとしか表示してくれません。
仕方がないので、データは配列か、オブジェクトとして実際に取得します。
これには、pg_fetch_array() とか pg_fetch_object() とかを使います。 私は、オブジェクト指向プログラミングはあまり出来ませんが、なんとなく pg_fetch_object() の方を使うことが多いです。

また、これらのデータにアクセスするには、行カウンタが必要になります。
また、例えばデータをテーブルなどとして表示する場合、通常は繰り返しループなどを利用するので、 この際の終了条件となるレコードの総数をあらかじめ求めておく必要があります。 取得したレコード数を調べるには pg_numrows() を使います。
尚、pg_numrows() で取得するレコード数は1からカウントしていますが、レコードの取り出しは、0 から始まるので、 その辺に注意が必要です。
( 要するに行カウンタは 0 から始めないと最初のレコードが見かけ上欠損するということ )

ではまず、今出てきた関数の構文です。

構文1: 1レコード  = pg_fetch_array ( 結果セット, 行番号 ) ;
構文2: 1レコード  = pg_fetch_object ( 結果セット, 行番号 ) ;
構文3: レコード数 = pg_numrows ( 結果セット ) ;

で、データベースに接続し、データを取得してテーブルで表示するスクリプトとしてはこんな感じになります。
ここでは pg_fetch_object() を使用しています。

----------------------------------------------------------------------------------------------------
  $con    = pg_connect("dbname=TEST");  // データベースに接続
  $result = pg_exec($con, "SELECT * FROM zaiko ;"); // クエリを発行
  $rows   = pg_numrows($result);  // レコードの総数を取得
  $row    = 0;  // 行カウンタを初期化

  echo "<TABLE border=1><TR><TH>hinmei</TH><TH>zaiko</TH></TR>\n";

  while( $row < $rows ){
    $DATA = pg_fetch_object( $result, $row );  // 結果セットからレコードを1行取得する
    echo "<TR><TD>{$DATA->hinmei}</TD><TD>{$DATA->zaiko}</TD></TR>\n";
    // オブジェクトの場合は、変数名->カラム名 でそのカラムのデータを参照できます

    $row ++;  // 行カウンタを進める
  }
  echo "</TABLE>\n";
----------------------------------------------------------------------------------------------------

これで、テーブル zaiko 内の全データがテーブルで表示されます。
こんな感じかな (これは最初からHTMLです(^^;;;)。

hinmeizaiko
yellow60
orange60
white60
black60
blue60
green100
red75


実はPHP で使う場合の基本はこれで終りみたいな物です。更新や削除でも、結局は SQL 文を pg_exec() で発行すれば良いだけなので、最終的にはどんな SQL を書くか、と言う事が問題なって来ます(^^;;;