oci_num_rows

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

oci_num_rows文の実行で作用された行数を取得する

説明

oci_num_rows(resource $statement): int

文の実行で作用された行数を取得します。

パラメータ

statement

有効な OCI ステートメント ID。

返り値

作用された行の数を表す整数値、あるいはエラー時に false を返します。

例1 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) . " rows inserted.<br />\n";
oci_free_statement($stid);

$stid oci_parse($conn"delete from emp2");
oci_execute($stidOCI_DEFAULT);
echo 
oci_num_rows($stid) . " rows deleted.<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);

?>

注意

注意:

この関数は、select が返す行の数は 返しません ! SELECT 文の場合、この関数は oci_fetch*() 関数によってバッファに取得された行数を返します。

注意:

PHP バージョン 5.0.0 以前では、代わりに ocirowcount() を使用しなければなりません。 まだこの名前を使用することができ、下位互換性のため oci_num_rows() への別名として残されていますが、 推奨されません。

add a note add a note

User Contributed Notes 5 notes

up
0
pluueer at hotmail dot com
14 years ago
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;
up
-1
raywachaga at gmail dot com
5 years ago
<?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
up
-5
Dawid Krysiak
7 years ago
oci_num_rows() called after running i.e. TRUNCATE query, always returns 0.
up
-12
justin at flakmag dot com
23 years ago
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.
up
-21
batti at digito dot com
24 years ago
this function can be used with select statement, and also return affected number of rows.
But remember this, use this after fetch statement.
To Top