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();
サンプルプログラムでは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() メソッドを使用して変更できます。
取得する行の番号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 を返します。 |
