oci_fetch_array不会在PHP中返回预期的列数据

时间:2014-05-14 08:01:19

标签: php

我正在从数据库中检索表行。看起来我成功检索了1行,但是当我尝试访问该行时,它最终无法进行评估。

代码

请注意,我知道其中存在SQL注入漏洞,但这不是我有兴趣解决此问题的主要问题:

<?php
include("core/connection.php");

if (!empty($_POST)) {

  $stid = oci_parse($conn,
    "SELECT CustomerNo FROM Customers WHERE Username = '" . $_POST['username']
    . "' AND Password = '" . $_POST['password'] . "'");

  oci_execute($stid);

  $count = oci_fetch_all($stid, $res);
  echo "$count rows";

  $row = oci_fetch_array($stid, OCI_NUM);
  echo $row['0'];

  oci_free_statement($stid);
  oci_close($conn);
}
?>

结果

当我这样做时

echo "$count rows";

它显示1行,但是当我做

echo $row['0'];

它什么都不返回。

1 个答案:

答案 0 :(得分:10)

带有oci_fetch_array()标志的

OCI_ASSOC获取 关联 数组,而不是枚举数组....这意味着数组键是数据库查询中的列名,而不仅仅是数字

因此$row['CUSTOMERNO']存在,$row[0]没有

请参阅documentation了解详情

修改

此外,您最初调用oci_fetch_all()的事实意味着您已经将完整的结果集检索到$res,因此当您调用oci_fetch_array()时,内部指针已经在最后结果集,所以不会再返回任何内容。