©
This document uses PHP Chinese website manual Release
(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
$stmt
[, int $row_number
= -1
] )Returns an array, indexed by both column name and position, representing a row in a result set. Note that the row returned by db2_fetch_both() requires more memory than the single-indexed arrays returned by db2_fetch_assoc() or db2_fetch_array() .
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.
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
if there are no rows left
in the result set, or if the row requested by
row_number
does not exist in the result set.
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 = db2_prepare ( $conn , $sql );
$result = db2_execute ( $stmt );
while ( $row = db2_fetch_both ( $stmt )) {
printf ( "%-5d %-16s %-32s %10s\n" ,
$row [ 'ID' ], $row [ 0 ], $row [ 'BREED' ], $row [ 3 ]);
}
?>
以上例程会输出:
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 call db2_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 = db2_exec ( $stmt , $sql , array( 'cursor' => DB2_SCROLLABLE ));
$i = 2 ;
while ( $row = db2_fetch_both ( $result , $i )) {
printf ( "%-5d %-16s %-32s %10s\n" ,
$row [ 0 ], $row [ 'NAME' ], $row [ 2 ], $row [ 'WEIGHT' ]);
$i = $i + 2 ;
}
?>
以上例程会输出:
0 Pook cat 3.20 5 Rickety Ride goat 9.70 2 Smarty horse 350.00
[#1] eacosta at openware dot biz [2008-06-05 08:55:34]
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