2011-12-01 73 views
1

當我使用oci_fetch_array和計數我得到22(我認爲這意味着它得到兩行)這是錯誤的應該是11(11是列數)和 當我使用oci_fetch_row我得到1這是正確的。 誰能告訴我爲什麼會發生這種情況?計數從查詢返回的行

$sql = "SELECT * FROM USERS WHERE USERNAME= :uname AND PWORD = :pword"; 
$stmt = oci_parse($c, $sql); 

$uname=$_POST['uname']; 
$pword=$_POST['pword']; 

oci_bind_by_name($stmt, ":uname",$uname); 
oci_bind_by_name($stmt, ":pword",$pword); 

oci_execute($stmt); 


$res = oci_fetch_array($stmt); 
$res2 = oci_fetch_row($stmt); 
$num = count($res); 
$num2 = count($res2); 
echo $num . "<br/>"; 
echo $num2 . "<br/>"; 

回答

2

按照docs,oci_fetch_array作品就像mysql_fetch_array,所以你必須通過數組來運行。

也就是說,你只保存你的第一行中的oci_fetch_array,而不是你應該做這樣的

$sql = "SELECT * FROM USERS WHERE USERNAME= :uname AND PWORD = :pword"; 
$stmt = oci_parse($c, $sql); 

$uname=$_POST['uname']; 
$pword=$_POST['pword']; 

oci_bind_by_name($stmt, ":uname",$uname); 
oci_bind_by_name($stmt, ":pword",$pword); 

oci_execute($stmt); 

$data = array(); 

while($res = oci_fetch_array($stmt)) 
{ 
    $data[] = $res; 
} 

$num = count($data); 
echo $num . "<br/>"; 
+0

謝謝,只是發現我自己,它的工作原理,使用起來更簡單,但不明白爲什麼我得到一個正確的答案和錯誤的答案,但無論如何,再次感謝。 – clonebaby59

+0

這應該和你的'oci_num_rows'一樣返回,但是這樣做的可怕性很低。 –

+0

@ clonebaby59 - 我的印象是,你還沒有理解你到目前爲止的兩個答案,這兩個答案都是正確的。你的代碼沒有得到正確的答案,因爲它甚至沒有得到一個行數;這是一個列計數。 –

1

的oci_ *庫是不是太不相似mysql_ *在PHP。

取回陣列將類似的東西回到這個

Array(0 => "some_key" => "some_value") 

凡爲獲取assoc命令將返回

Array("some_key" => "some_value") 

我無法完全記得,但我敢肯定,這是你的問題的根源。