.Water-Sunlight
.サイトメニュー
.検索
.オンライン状況
登録ユーザ: 0
ゲスト: 11
.
<< Prev
非SELECT文の実行
« INDEX »
PHP データベース編
Next >>
トランザクション処理
作成日:2006/06/17

3C.6 SELECT文の実行

### 検索実行
$sth = $db->prepare($sql);
if(PEAR::isError($sth)){ /* エラー処理 */ }

$res =& $db->execute($sth);
if(PEAR::isError($res)){ /* エラー処理 */ }

### 行フェッチ
while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
  foreach( $row as $key => $value ){

    // $key  : 検索結果のカラム名
    // $value: 検索結果の値

  }
}

$db->freePrepared($sth);
$res->free();
※ 上のコードは説明し易く変更してあります( 実際のsqlexec_pdb.phpとは違います)

 サンプルプログラムではSELECT文を prepare()/exec() メソッドで処理していますが、 query() メソッドを使って以下のようにも書けます。

$res =& $db->query($sql);
if(PEAR::isError($res)){ /* エラー処理 */ }

一回きりのSQL文の場合はこの方が便利です。 prepare()/execute() またはquery() メソッドの使い方は前出の「非SELECT文の実行」を参照して下さい。

SELECT文を実行した場合、execute() または query() メソッドは、検索結果を含む DB_result オブジェクトを返します。 上例では DB_result オブジェクトから行をフェッチするのに fetchRow() メソッドを使っていますが、 fetchInto() メソッドを使っても行フェッチができます。 行フェッチの時にパラメータ DB_FETCHMODE_ASSOC を指定するとカラム名をキーとする連想配列が返されます。 通常のアプリケーションなどの場合、行フェッチの部分は、以下のようになります。

# 行フェッチ
while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {

  $foo = $row['foo'];  // fooカラムの値の取得
  $bar = $row['bar'];  // barカラムの値の取得

}

また、検索結果の行数を取得する場合は numRows() メソッドを、カラム数を取得する場合は numCols() メソッドを使用します。 検索結果が不要になったら free() メソッドを使って結果セットが使用していたメモリを開放します。


結果セット取得関連のメソッド
メソッド説明
mixed
&DB_result::fetchRow
([integer $fetchmode =
  DB_DEFAULT_MODE
[,integer $rownum = NULL]])

結果セットから行を取得し、結果ポインタを次の行に移動します。 行が有効な場合、fetchmode に応じた配列またはオブジェクを返し、 行が最後に到達した場合は NULL を、行の取得に失敗した場合は DB_Error オブジェクトを返します。

フェッチモードは引数 fetchmode で指定します。 デフォルトのフェッチモードは DB_FETCHMODE_DEFAULT ですが、 DB_common::setFetchMode() メソッドを使用して変更できます。

フェッチモード取得される型
DB_FETCHMODE_ORDERED
添字配列
arr[0]
DB_FETCHMODE_ASSOC
連想配列
arr['ColName']
DB_FETCHMODE_OBJECT
オブジェクト
obj->ColName

取得する行の番号rownum (0 〜) を指定することもできます。

mixed
DB_result::fetchInto
( mixed &$arr
[,integer $fetchMode =
   DB_FETCHMODE_DEFAULT
[,integer $rowNum = NULL]])

結果セットから行を取得し、結果ポインタを次の行に移動します。取得した行は 引数 $arr に設定されます。 行が有効な場合、DB_OK を返し、行が最後に到達した場合は NULL を、行の取得に失敗した場合は DB_Error オブジェクトを返します。

fetchInto() は取得した行は引数で戻すこと以外は fetchRow() と同じです。

mixed
DB_result::numRows()

結果セット内の行の行数を返します。 失敗した場合は DB_Error オブジェクトを返します。

※Access では動作しません。 その他、DBMS毎の実装依存については PEAR::DB の 公式マニュアルを参照して下さい。

mixed
DB_result::numCols()
結果セット内の行のカラム数を返します。失敗した場合は DB_Error オブジェクトを返します。
boolean
DB_result::free()
結果セットが使用していたメモリを開放します。 DB_result オブジェクト自体は削除しません。成功時には TRUE 、失敗時には FALSE を返します。
<< Prev
非SELECT文の実行
« INDEX »>
Page Top
Next >>
トランザクション処理

.