ifx_fetch_row

(PHP 3 >= 3.0.3, PHP 4, PHP 5)

ifx_fetch_row -- Get row as enumerated array

Description

array ifx_fetch_row ( int result_id [, mixed position] )

Returns an associative array that corresponds to the fetched row, or FALSE if there are no more rows.

Blob columns are returned as integer blob id values for use in ifx_get_blob() unless you have used ifx_textasvarchar(1) or ifx_byteasvarchar(1), in which case blobs are returned as string values. Returns FALSE on error

result_id is a valid resultid returned by ifx_query() or ifx_prepare() (select type queries only!).

position is an optional parameter for a "fetch" operation on "scroll" cursors: "NEXT", "PREVIOUS", "CURRENT", "FIRST", "LAST" or a number. If you specify a number, an "absolute" row fetch is executed. This parameter is optional, and only valid for SCROLL cursors.

ifx_fetch_row() fetches one row of data from the result associated with the specified result identifier. The row is returned as an array. Each result column is stored in an array offset, starting at offset 0, with the column name as key.

Subsequent calls to ifx_fetch_row() would return the next row in the result set, or FALSE if there are no more rows.

例子 1. Informix fetch rows

<?php
$rid
= ifx_prepare ("select * from emp where name like " . $name,
                     
$connid, IFX_SCROLL);
if (!
$rid) {
    
/* ... error ... */
}
$rowcount = ifx_affected_rows($rid);
if (
$rowcount > 1000) {
    
printf ("Too many rows in result set (%d)\n<br />", $rowcount);
    die (
"Please restrict your query<br />\n");
}
if (!
ifx_do ($rid)) {
   
/* ... error ... */
}
$row = ifx_fetch_row ($rid, "NEXT");
while (
is_array($row)) {
    for (
reset($row); $fieldname=key($row); next($row)) {
        
$fieldvalue = $row[$fieldname];
        
printf ("%s = %s,", $fieldname, $fieldvalue);
    }
    
printf("\n<br />");
    
$row = ifx_fetch_row($rid, "NEXT");
}
ifx_free_result ($rid);
?>


add a note add a note User Contributed Notes
michael(at)webstaa(cot)com
10-Feb-2006 08:22
If you want the result as an enumerated array try:
<?php
   $row
= array_values ( ifx_fetch_row ( $result ));
?>
steve at kayess dot com dot au
28-Sep-2004 05:02
When using a stored procedure to retrieve data use
the following to identify columns:

while($row = ifx_fetch_row($result))
{
     echo $row['[Expr1]']."<br />";
     echo $row['[Expr2]'];
}

'[Expr_]' is what is returned as the identifier.
dorn at bakcommunications dot com
27-Apr-2003 11:56
Simple example of fetching rows for data results:

<html>
<?php
$database
= "xxx";
$host = "yyy";
$user = "username";
$pass = "password";
if (!
$connect_id = ifx_connect("$database@$host", $user, $pass)) {
   echo
"Unable to connect to Informix Database\n";
   exit();
}
$sql = "select customer, quantity from order";
$result = ifx_query($sql, $connect_id) or die ("couldn't execute the query");
?>
<table>
<tr>
<?php
  
while ($row = ifx_fetch_row($result)) {   
   echo
"<td>".$row['customer']."</td>";
   echo
"<td>".$row['quantity']."</td>\n";
   }
ifx_free_result($result);
ifx_close($connect_id);
?>
</tr>
</table>
</html>
26-Apr-2001 06:01
Note a small piece of errata.. I was playing with writing my own ESQL/C programs, and left an a.out file in INFORMIXDIR.. my PHP applications would not run until I deleted this file.

Arh.
26-Apr-2001 06:00
This is kind've nasty.

Warning: Can not fetch row on cursor E [SQLSTATE=IX 000 SQLCODE=-461] (cursor10) in
/home/httpd/hosts/oswego/stars/UserEditFind.php on line 30

Occasionally this is seen from an ifx_fetch_row command.. note that it seems the fetch_row works perfectly fine, however, it will still output this error randomly and sometimes frighten Joe User.

Make sure you place an @ symbol in front of all ifx_fetch_rows, otherwise you'll get a lot of meaningless phonecalls.

Somewhat annoying..

FYI, -461 is 'file open error'
michaeld at miller-group dot net
15-Mar-2001 03:37
Note that this does NOT return an enumerated array, as the top line of this page would have you believe.  It ONLY returns an associative array.

As well, the key values are ALL lower-case, regardless of the SELECT statement or database field names, which is kind've annoying.  I really wish there was an ifx_fetch_array similar to that available for MySQL.  (submitted a feature request.)
rpuchalsky at att dot net
12-Jan-2001 04:23
If you use a select statement that
identifies fields according to which
table they come from, i.e.

select tab1.name, tab2.phone from
tab1, tab2
where tab1.id = tab2.id

then the associative keys of the array returned by ifx_fetch_row will not include the table names.  For the example above, if you used

$row = ifx_fetch_row ($rid);

then the first field in the
returned array would be $row["name"],
not $row["tab1.name"] .
kgolding at webcom dot com dot au
28-Sep-2000 04:38
If you want to do an absolute fetch and you want to use a value stored in a variable to specify the row number to get, then you have to cast your variable to type "int".
eg. $row = ifx_fetch_row ($res_id, (int)$row_to_get);
The (int) before the variable named $row_to_get is the bit that does the cast. If you don't do this then you get the following error:
Warning: invalid positioning arg on fetch in...