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 5)
ibase_fetch_row — Lit une ligne d'une base Interbase
Description
$result_identifier
[, int $fetch_flag = 0
] )ibase_fetch_row() récupère une ligne de données depuis le jeu de résultats donné.
Les appels suivants à ibase_fetch_row() vont retourner
la prochaine ligne dans le résultat, ou bien FALSE s'il n'y a plus
de ligne.
Liste de paramètres
-
result_identifier -
Un identifiant de résultat InterBase.
-
fetch_flag -
fetch_flagest une combinaison des constantesIBASE_TEXTetIBASE_UNIXTIME. PasserIBASE_TEXTfait retourner le contenu du BLOB au lieu de l'ID du BLOB. PasserIBASE_UNIXTIMEfait retourner les valeurs date/time sous forme de timestamps UNIX au lieu de chaînes formatées.
Valeurs de retour
Retourne un tableau correspondant à la ligne récupérée, ou FALSE
s'il n'y a plus de ligne. Chaque colonne du résultat est stockée
dans une position du tableau, en commençant à 0.
Voir aussi
- ibase_fetch_assoc() - Récupère une ligne du résultat d'une requête dans un tableau associatif
- ibase_fetch_object() - Lit une ligne dans une base Interbase dans un objet
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
