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]
}
?>
ibase_fetch_row
(PHP 4, PHP 5)
ibase_fetch_row — Pobiera wiersz wyniku zapytania w postaci tablicy numerycznej
Opis
$identyfikator_wyniku
[, int $znacznik_pobrania = 0
] )ibase_fetch_row() pobiera jeden wiersz zawierający dane z podanego zbioru wynikowego.
Kolejne wywołanie ibase_fetch_row()
zwróci następny wiersz ze zbioru wynikowego, lub FALSE jeśli nie
ma już więcej wierszy.
Parametry
-
identyfikator_wyniku -
Identyfikator wyniku Firebird/Interbase.
-
znacznik_pobrania -
znacznik_pobraniajest kombinacją stałychIBASE_TEXTiIBASE_UNIXTIMEłączonych ze sobą przy pomocy operatora sumy bitowej. Przekazanie stałejIBASE_TEXTpowoduje, że ta funkcja zwraca zawartość BLOBa zamiast identyfikatora BLOBa. Przekazanie stałejIBASE_UNIXTIMEpowoduje, że ta funkcja zwraca wartości daty/czasu w postaci unixowego znacznika czasu, zamiast sformatowanego łańcucha.
Zwracane wartości
Zwraca tablicę numeryczną odpowiadającą pobranemu wierszowi, lub FALSE
jeśli nie ma już więcej wierszy. Wartości kolumn są umieszczane na kolejnych
pozycjach tablicy, zaczynając od 0.
Zobacz też:
- ibase_fetch_assoc() - Pobiera wiersz wyniku zapytania w postaci tablicy asocjacyjnej
- ibase_fetch_object() - Pobiera wiersz wyniku zapytania w postaci obiektu
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
