PHPKonf İstanbul PHP Conference 2015

ibase_fetch_row

(PHP 5)

ibase_fetch_rowRuft eine Zeile aus einer InterBase-Datenbank ab

Beschreibung

array ibase_fetch_row ( resource $result_identifier [, int $fetch_flag = 0 ] )

ibase_fetch_row() ruft eine Datenzeile aus der gegebenen Ergebnismenge ab.

Folgende Aufrufe von ibase_fetch_row() geben die nächste Zeile der Ergebnismenge zurück, oder FALSE, wenn es keine weiteren Zeilen gibt.

Parameter-Liste

result_identifier

Eine InterBase Ergebniskennung.

fetch_flag

fetch_flag ist eine Oder-Verknüpfung der Konstanten IBASE_TEXT und IBASE_UNIXTIME. Wird IBASE_TEXT angegeben, dann werden BLOB Inhalte anstelle von BLOB-IDs zurückgegeben. Wird IBASE_UNIXTIME angegeben, dann werden Datum/Zeit-Werte als Unix Zeitstempel anstelle von formatierten Zeichenketten zurückgegeben.

Rückgabewerte

Gibt ein Array zurück, das der abgerufenen Zeile entspricht, oder FALSE, wenn es keine weiteren Zeilen gibt. Jede Ergebnisspalte wird in einem Array-Offset gespeichert, beginnend mit Offset 0.

Siehe auch

add a note add a note

User Contributed Notes 2 notes

up
1
richard at wojthegame dot com
9 years ago
If you have a query

"select ... from table1 where ..."

and would like to know the cardinality of the result set by issuing a separate query

"select count(*) from table1 where ..."

then you might end up with an incorrect value since an insert or delete can occur between the running of these queries (unlikely, but possible).
The only way i can think of getting the correct value would be something along the lines of

<?php

$qry
= "select ... from table1 where ...";
$result = ibase_query($tr, $qry) // assume $tr is a transaction

$count = 0;
while (
$row[$count] = ibase_fetch_assoc($result))
   
$count++;

?>

then $count is the cardinality, and $row the result set.
Then you can work with the result set:

<?php

for ($i = 0; $i < $count; $i++)
{
 
// do something with $row[$i]
}

?>
up
0
gurroa at gurroa dot cz
11 years ago
I had some troubles with moving php application from one dbase to another. From SyBase to Interbase.
Especially with missing function "ibase_num_rows($result)".

These are functions that helped me.
<?php
...
$dbh = ibase_connect ($host, $username, $password);
...
$ar_count_queries = array();

function
ibasequery($query) {
 
$cquery = preg_replace("/SELECT(.*?)FROM(.*?)/","SELECT COUNT(*) FROM \\2",$query);
  if (
$cquery != $query) {
  
$crow=get_object_vars( ibase_fetch_object( ibase_query( $GLOBALS["dbh"], $cquery ) ) );
   }
  @
$res = ibase_query($GLOBALS["dbh"],$query);
  if (isset(
$res)) {
    if (isset(
$crow)) {
    
$GLOBALS["ar_count_queries"][$res] = $radcountselect["COUNT"];
    }
    return
$res;
  }
   return
false;
}

function
ibasenumrows($result) {
  return
$GLOBALS["ar_count_queries"][$res];
}

function
ibasefetchrow($result) {
  return
get_object_vars(ibase_fetch_object($result));
}

// example
$result = ibasequery("SELECT * FROM TABLE");
$numrows = ibasenumrows($result);
echo
"Number of rows: $numrows.\nContent: \n";
while (
$onerow = ibasefetchrow($res)) {
  foreach(
$onerow as $key => $value) {
    echo
$key.": ".$value.", ";
  }
  echo
"\n";
}
?>
Gurroa
To Top