0

当使用 Toad for Oracle 和 PHP 函数 oci_fetch_assoc 使用相同的查询、相同的用户数据库凭据时,oci_fetch_assoc 返回的数据数组在一些列中丢失,并且一些列一起丢失。Toad 结果中显示了所有预期结果。

我在这里用谷歌搜索和搜索,没有解决方案。

Toad 正在使用 Instant Client - 11.2.0.1.0

我的 PHP oci8 信息

OCI8 支持 - 已启用

版本 1.4.6

修订 $Revision: 313688 $

活动持久连接 0

活动连接 0

Oracle 运行时客户端库版本 11.2.0.2.0

Oracle 即时客户端 10.2 版

启用临时 Lob 支持

已启用集合支持

4

2 回答 2

0

使用 oci_fetch_assoc 时,只会返回值为非 NULL 的字段。为此,我使用以下代码获取列名:

for ($i=1; $i<=oci_num_fields($parsed); $i++)
{
    $col = oci_field_name($parsed, $i);
    $columnNames[] = $col; // store column names in array
}

然后我的 fetch 函数看起来像这样:

function fetch()
{
    global $columnNames; // (I actually have a Query class so I use $this->columnNames)
    $row = oci_fetch_array($parsed, OCI_ASSOC);
    foreach ($columnNames as $colname)
        $row[$colname] = isset($row[$colname]) ? $row[$colname] : null;

    return $row;
}

编辑:另一个(不太可能)的可能性是缺少的列是 CLOBS。您需要使用 OCI_RETURN_LOBS 标志获取那些(请参阅oci_fetch_array

于 2012-07-26T14:41:00.180 回答
0

如果您在 PHP 和 Toad 中运行完全相同的查询并且它们返回不同的结果,那么唯一的结论是您的 PHP 忽略了结果集中的几列。

于 2012-07-26T11:07:48.947 回答