2013-09-23 24 views
1

我在Oracle中有關查詢一個問題:PHP甲骨文oci_num_rows導致0

的問題是,中oci_num_rows結果始終爲0

這裏是我到目前爲止的代碼:

$query = "SELECT IP_ADDRESS, STATUS FROM SEIAPPS_IP_ADDRESS WHERE IP_ADDRESS='$ip'"; 
    $result = oci_parse($c1, $query); 
    oci_execute($result); 
    echo $found = oci_num_rows($result); 

爲了確認,我嘗試清除條件"WHERE IP_ADDRESS='$ip'"。結果仍然是0,而在我的表中有一些數據。

有什麼建議嗎?

+0

任何意見傢伙? –

+1

[如何使用PHP從Oracle數據庫中獲取數據]可能的重複(http://stackoverflow.com/questions/17782007/how-to-fetch-data-from-oracle-database-using-php) –

+0

我不使用PDO ... –

回答

4

此函數不會返回所選行數!對於SELECT statements,此函數將返回使用函數獲取到緩衝區的行數。

試試這個來檢查你的連接證書是否正確。

<?php 
$conn = oci_connect("hr", "welcome", "localhost/XE"); 
if (!$conn) { 
    $e = oci_error(); // For oci_connect errors do not pass a handle 
    trigger_error(htmlentities($e['message']), E_USER_ERROR); 
} 
?> 
5

使用此:

$query = "SELECT IP_ADDRESS, STATUS FROM SEIAPPS_IP_ADDRESS WHERE IP_ADDRESS='$ip'"; 
$result = oci_parse($c1, $query); 
oci_execute($result); 
$numrows = oci_fetch_all($result, $res); 
echo $numrows." Rows"; 
+0

我用盡oci_fetch_all的服務器空間不足。 – Michele

1

對於其他人誰掉進這個陷阱,這裏是一個什麼樣的oci_fetch_all方法將返回一個簡單的總結。

$s = oci_parse($conn, " 
      SELECT 1 AS A FROM DUAL 
    UNION SELECT 2 AS A FROM DUAL 
    UNION SELECT 3 AS A FROM DUAL 
    UNION SELECT 4 AS A FROM DUAL 
"); 
oci_execute($s); 
echo "records fetched: ". oci_num_rows($s)."\n"; 

oci_fetch($s); 
echo "records fetched: ". oci_num_rows($s)."\n"; 

oci_fetch($s); 
echo "records fetched: ". oci_num_rows($s)."\n"; 

oci_fetch_all($s, $out); 
echo "records fetched: ". oci_num_rows($s)." out count: ". count($out['A']) . "\n"; 

將輸出:

records fetched: 0 
records fetched: 1 
records fetched: 2 
records fetched: 4 out count: 2 

所以oci_num_rows是漸進的,每次調用oci_fetch將計數器增加一(假設有至少一個以上的記錄來獲取),並oci_fetch_all將獲取所有剩下的行並將它們放入$out緩衝區中。