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
- db2_fetch_array() - Returns an array, indexed by column position, representing a row in a result set
- db2_fetch_assoc() - Returns an array, indexed by column name, representing a row in a result set
- db2_fetch_object() - Returns an object with properties representing columns in the fetched row
- db2_fetch_row() - Sets the result set pointer to the next row or requested row
- db2_result() - Returns a single column from a row in the result set
Found A Problem?
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