If you want to return te number of rows without fetching all data it might by more efficient to use this code (correct me if I'm wrong):
$sql_query = 'SELECT COUNT(*) AS NUMBER_OF_ROWS FROM (' . $your_query . ')';
$stmt= oci_parse($conn, $sql_query);
oci_define_by_name($stmt, 'NUMBER_OF_ROWS', $number_of_rows);
oci_execute($stmt);
oci_fetch($stmt);
echo $number_of_rows;
oci_num_rows
(PHP 5, PECL OCI8 >= 1.1.0)
oci_num_rows — Devuelve el número de filas afectadas durante la ejecución de una sentencia
Descripción
$statement
)Obtiene el número de filas afectadas durante la ejecución de una sentencia.
Parámetros
-
statement -
Un identificador de sentencia de OCI válido.
Valores devueltos
Devuelve el número de filas afectadas como un entero, o FALSE en caso de error.
Ejemplos
Ejemplo #1 Ejemplo de oci_num_rows()
<?php
$conn = oci_connect("scott", "tiger");
$stmt = oci_parse($conn, "create table emp2 as select * from emp");
oci_execute($stmt);
echo oci_num_rows($stmt) . " rows inserted.<br />";
oci_free_statement($stmt);
$stmt = oci_parse($conn, "delete from emp2");
oci_execute($stmt, OCI_DEFAULT);
echo oci_num_rows($stmt) . " rows deleted.<br />";
oci_commit($conn);
oci_free_statement($stmt);
$stmt = oci_parse($conn, "drop table emp2");
oci_execute($stmt);
oci_free_statement($stmt);
oci_close($conn);
?>
Notas
Nota:
Esta función no devuelve el número de filas seleccionadas. Para sentencias SELECT, esta función devolverá el número de filas que fueron obtenidas desde el búfer con funciones de tipo oci_fetch*().
Nota:
En versiones de PHP anteriores a la 5.0.0 se debe usar ocirowcount() en su lugar. Este nombre aún puede usarse; se dejó como alias de oci_num_rows() por razones de retrocompatibilidad. Sin embargo, este nombre es obsoleto y no se recomienda.
hello,
here'is an example who works:
$connexion = ("name_bd","pass_db"); //set up connexion on database
$query="select * from order "; // query for the test
$parse = ociparse($connexion,$query); // parse query
ociexecute($pase); // execute the query on server (on temporary memory)
ocifetchstatement($pase,$tab_result); // the result will be fetched in the table $tab_result
echo ocirowcount($parse); // show the numbers of result
/**** and if you want to posting the results of query ***/
$count = count($tab_result);
for($i=0;$i<=$count;$i++)
{
echo $tab_result[$i]."<br>";
}
you can also do it with the function ociresult():
while(ocifetch($parse))
{
echo ociresult($parse,"[capital letter of the name of feild that you want to show on naviator]");
}
Attention : all of name of tables on oracle database are in capital letter when you use an other application for connect to it.
example :
to select the field no_client on table client, on your script of posting, you should write :
echo ociresult($parse,"NO_CLIENT");
not :
echo ociresult($parse,"no_client");
//end
Enjoy
It appears the easiest workaround if you want to get numrows without moving to the end of the result set is to use:
numrows = OCIFetchStatement(...);
OCIExecute(...);
So that the execute re-executes the query. It's horribly inefficient to query twice, but it works.
this function can be used with select statement, and also return affected number of rows.
But remember this, use this after fetch statement.
