2011-12-01 72 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") 

我无法完全记得,但我敢肯定,这是你的问题的根源。