oci_num_rows

(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)

oci_num_rows返回语句执行后受影响的行数

说明

oci_num_rows ( resource $stmt ) : int

oci_num_rows() 返回语句执行后受影响的行数。

Note:

本函数并不返回 SELECT 查询出来的行数!对于 SELECT 语句本函数将返回用 oci_fetch*() 函数取到缓冲区的行数。

Example #1 oci_num_rows() 例子

<?php
    
echo "<pre>";
    
$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($stmtOCI_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);
    echo 
"</pre>";
?>

oci_num_rows() 在出错时返回 false

Note:

在 PHP 5.0.0 之前的版本必须使用 ocirowcount() 替代本函数。该函数名仍然可用,为向下兼容作为 oci_num_rows() 的别名。不过其已被废弃,不推荐使用。

User Contributed Notes

raywachaga at gmail dot com 15-Sep-2018 01:53
<?php if ( oci_num_rows($result) == false ?>

You can use the snippet above to test out if a select statement returned any rows, it won't do a count but it comes in handy
Dawid Krysiak 22-Dec-2016 03:21
oci_num_rows() called after running i.e. TRUNCATE query, always returns 0.
pluueer at hotmail dot com 20-Apr-2010 02:51
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;
justin at flakmag dot com 26-Aug-2000 06:59
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.
batti at digito dot com 16-Feb-2000 08:52
this function can be used with select statement, and also return affected number of rows.
But remember this, use this after fetch statement.