oci_num_rows() called after running i.e. TRUNCATE query, always returns 0.
(PHP 5, PHP 7, PECL OCI8 >= 1.1.0)
oci_num_rows — Retourne le nombre de lignes affectées durant la dernière commande Oracle
$statement
)Retourne le nombre de lignes affectées durant la dernière commande Oracle.
statement
Un identifiant de requête OCI valide.
Retourne le nombre de lignes affectées, sous la forme d'un entier, ou
FALSE
si une erreur survient.
Exemple #1 Exemple avec oci_num_rows()
<?php
$conn = oci_connect("hr", "hrpwd", "localhost/XE");
if (!$conn) {
$m = oci_error();
trigger_error(htmlentities($m['message']), E_USER_ERROR);
}
$stid = oci_parse($conn, "create table emp2 as select * from employees");
oci_execute($stid);
echo oci_num_rows($stid) . " lignes insérées.<br />\n";
oci_free_statement($stid);
$stid = oci_parse($conn, "delete from emp2");
oci_execute($stid, OCI_DEFAULT);
echo oci_num_rows($stid) . " lignes effacées.<br />\n";
oci_commit($conn);
oci_free_statement($stid);
$stid = oci_parse($conn, "drop table emp2");
oci_execute($stid);
oci_free_statement($stid);
oci_close($conn);
?>
Note:
Cette fonction ne retourne pas le nombre de lignes sélectionnées. Pour les commandes de type SELECT, cette fonction va retourner le nombre de ligne qui ont été lues dans le buffer avec oci_fetch*().
Note:
Dans les versions de PHP antérieures à la version 5.0.0, vous devez utiliser la fonction ocirowcount(). Cet ancien nom est toujours utilisable : un alias a été fait vers la fonction oci_num_rows(), pour assurer la compatibilité ascendante. Toutefois, il est recommandé de ne plus l'utiliser.
oci_num_rows() called after running i.e. TRUNCATE query, always returns 0.
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;
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.