PHP: db2_fetch_both - Manual (original) (raw)

(PECL ibm_db2 >= 1.0.0)

db2_fetch_both — Returns an array, indexed by both column name and position, representing a row in a result set

Description

Parameters

stmt

A valid stmt resource containing a result set.

row_number

Requests a specific 1-indexed row from the result set. Passing this parameter results in a PHP warning if the result set uses a forward-only cursor.

Return Values

Returns an associative array with column values indexed by both the column name and 0-indexed column number. The array represents the next or requested row in the result set. Returns [false](reserved.constants.php#constant.false) if there are no rows left in the result set, or if the row requested byrow_number does not exist in the result set.

Examples

Example #1 Iterating through a forward-only cursor

If you call db2_fetch_both() without a specific row number, it automatically retrieves the next row in the result set. The following example accesses columns in the returned array by both column name and by numeric index.

`<?php

$sql

= "SELECT id, name, breed, weight FROM animals ORDER BY breed"; stmt=db2prepare(stmt = db2_prepare(stmt=db2prepare(conn, $sql); result=db2execute(result = db2_execute(result=db2execute(stmt);

while ( row=db2fetchboth(row = db2_fetch_both(row=db2fetchboth(stmt)) {
printf ("%-5d %-16s %-32s %10s\n", row[′ID′],row['ID'], row[ID],row[0], row[′BREED′],row['BREED'], row[BREED],row[3]);
}
?>`

The above example will output:

0 Pook cat 3.20 5 Rickety Ride goat 9.70 2 Smarty horse 350.00

Example #2 Retrieving specific rows with db2_fetch_both() from a scrollable cursor

If your result set uses a scrollable cursor, you can calldb2_fetch_both() with a specific row number. The following example retrieves every other row in the result set, starting with the second row.

`<?php

$sql

= "SELECT id, name, breed, weight FROM animals ORDER BY breed"; result=db2exec(result = db2_exec(result=db2exec(stmt, sql,array(′cursor′=>DB2SCROLLABLE));sql, array('cursor' => DB2_SCROLLABLE));sql,array(cursor=>DB2SCROLLABLE));i=2;
while ($row = db2_fetch_both($result, $i)) {
printf ("%-5d %-16s %-32s %10s\n", row[0],row[0], row[0],row['NAME'], row[2],row[2], row[2],row['WEIGHT']); i=i = i=i + 2;
}
?>`

The above example will output:

0 Pook cat 3.20 5 Rickety Ride goat 9.70 2 Smarty horse 350.00

See Also

Found A Problem?

eacosta at openware dot biz

17 years ago

Hello,

Some weeks ago I faced difficulties with walk a big number of 
records from a result set.

I was using the function db2_fetch_both in a method of a database adapter
class to retrieve just one record at a time. The total number of records
were: 5647 and when I reach record number 1600 the function crashed
generating the below message in "Actual result" field.

I am copying table's description next:

TMP_TABLE
-----------------------------------------------------------------
| ID        | TYPE        | SIZE        | NULL        |
-----------------------------------------------------------------
| ID        | INTEGER    | 4        | NO        |
| SERVICE    | VARCHAR    | 30        | NO        |
| ID_v        | VARCHAR    | 30        | NO        |
| INFORMATION    | CLOB        | 65536        | YES        |
| EXP_LEVEL    | INTEGER    | 4        | NO        |
| IP4B        | BIGINT    | 8        | NO        |
| MODIFIED    | INTEGER    | 4        | YES        |
| DETAIL    | VARCHAR    | 200        | YES        |
| FALSPOS    | INTEGER    | 4        | YES        |
-----------------------------------------------------------------

When it crashed I received this message from db2_fetch_both

db2_fetch_array() [function.db2-fetch-array]: Fetch Failure

After reported this message to IBM OpenDev I was helped by a OpenDev IBMer who noticed me 
that it wasn't a ibm_db2 module problem, in fact it was a database configuration 
issue. The OpenDev IBMer looked into my DB2 Client CLI TRACE files and found out what was happen.
So I had to modify APP_CTL_HEAP_SZ and everything seems to works fine now.

-- 
Esteban Acosta Villafañe
Area I+D
http://www.openware.biz/opendev
Linkein Profile: http://www.linkedin.com/in/estebanav