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 — Recuperar una fila desde una base de datos InterBase
Descripción
$result_identifier
[, int $fetch_flag = 0
] )ibase_fetch_row() recupera una fila de datos desde el conjunto de resultados dado.
Las llamadas subsiguientes a ibase_fetch_row()
devuelven la siguiente fila en el conjunto de resultados, o FALSE si no
hay más filas.
Parámetros
-
result_identifier -
Un identificador de resultado InterBase.
-
fetch_flag -
fetch_flages una combinación de las constantesIBASE_TEXTyIBASE_UNIXTIMEunidas con el operador lógico OR. Al pasarIBASE_TEXT, esta función devuelve contenidos BLOB en lugar de identificadores BLOB. Al pasarIBASE_UNIXTIME, esta función devuelve valores de fecha/hora como marcas de tiempo Unix en lugar de cadenas con formato.
Valores devueltos
Devuelve un array que corresponde a la fila recuperada, o FALSE si no
hay más filas. Cada columna del resultado es almacenado en una posición
del array, comenzando en 0.
Ver también
- ibase_fetch_assoc() - Extra una fila en forma de array asociativo de una consulta
- ibase_fetch_object() - Consulta un objeto de una base de datos InterBase
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
