db2_fetch_row

結果セットポインタを次の行あるいは要求された行に設定する

説明

bool db2_fetch_row(resource $stmt, int $row_number = -1)

db2_fetch_row を使用して結果セットを順に処理します。 あるいは、スクロール可能なカーソルを使用している場合は 指定した行を指すようにします。

結果セットから個々のフィールドを取得するには db2_result 関数をコールします。

db2_fetch_row および db2_result をコールするのではなく、 ほとんどのアプリケーションでは db2_fetch_assocdb2_fetch_both、 および db2_fetch_array のいずれかをコールするでしょう。 これらは、結果セットのポインタを前に進めたうえで行の内容を配列として取得します。

パラメータ

stmt

有効な stmt リソース。

row_number

スクロール可能なカーソルの場合に、結果セットの行番号を指定します。 行番号は 1 から始まります。

戻り値

結果セットに指定した行が存在する場合に true、存在しない場合に false を返します。

例1 結果セットを順に処理する

次の例では、db2_fetch_row を使用して結果セットを順に処理し、db2_result で結果セットからカラムを取得する方法を示します。

<?php
$sql = 'SELECT name, breed FROM animals WHERE weight < ?';
$stmt = db2_prepare($conn, $sql);
db2_execute($stmt, array(10));
while (db2_fetch_row($stmt)) {
    $name = db2_result($stmt, 0);
    $breed = db2_result($stmt, 1);
    print "$name $breed";
}
?>

上の例の出力は以下となります。

cat Pook
gold fish Bubbles
budgerigar Gizmo
goat Rickety Ride

例2 i5/OS recommended alternatives to db2_fetch_row/db2_result

i5/OS では、db2_fetch_row/db2_result ではなく db2_fetch_bothdb2_fetch_array あるいは db2_fetch_object を使用することを推奨します。一般に db2_fetch_row/db2_result は、さまざまなカラム型で EBCIDIC から ASCII への変換の際に問題が発生します。 DBCS アプリケーションではデータが切り捨てられてしまう可能性もあります。 また、パフォーマンス面でも db2_fetch_bothdb2_fetch_array および db2_fetch_objectdb2_fetch_row/db2_result よりすぐれています。

<?php
  $conn = db2_connect("","","");
  $sql = 'SELECT SPECIFIC_SCHEMA, SPECIFIC_NAME, ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE, ROUTINE_CREATED, ROUTINE_BODY, IN_PARMS, OUT_PARMS, INOUT_PARMS, PARAMETER_STYLE, EXTERNAL_NAME, EXTERNAL_LANGUAGE FROM QSYS2.SYSROUTINES FETCH FIRST 2 ROWS ONLY';
  $stmt = db2_exec($conn, $sql, array('cursor' => DB2_SCROLLABLE));
  while ($row = db2_fetch_both($stmt)){
    echo "<br>db2_fetch_both {$row['SPECIFIC_NAME']} {$row['ROUTINE_CREATED']} {$row[5]}";
  }
  $stmt = db2_exec($conn, $sql, array('cursor' => DB2_SCROLLABLE));
  while ($row = db2_fetch_array($stmt)){
    echo "<br>db2_fetch_array {$row[1]}  {$row[5]}";
  }
  $stmt = db2_exec($conn, $sql, array('cursor' => DB2_SCROLLABLE));
  while ($row = db2_fetch_object($stmt)){
    echo "<br>db2_fetch_object {$row->SPECIFIC_NAME} {$row->ROUTINE_CREATED}";
  }
  db2_close($conn);
?>

上の例の出力は以下となります。

db2_fetch_both MATCH_ANIMAL 2006-08-25-17.10.23.775000 2006-08-25-17.10.23.775000
db2_fetch_both MULTIRESULTS 2006-10-17-10.11.05.308000 2006-10-17-10.11.05.308000
db2_fetch_array MATCH_ANIMAL 2006-08-25-17.10.23.775000
db2_fetch_array MULTIRESULTS 2006-10-17-10.11.05.308000
db2_fetch_object MATCH_ANIMAL 2006-08-25-17.10.23.775000
db2_fetch_object MULTIRESULTS 2006-10-17-10.11.05.308000

参考

  • db2_fetch_array
  • db2_fetch_assoc
  • db2_fetch_both
  • db2_fetch_object
  • db2_result