PHP和Toad Oracle的查询结果不同

时间:2012-07-26 11:06:00

标签: php oracle toad

当使用相同的查询,相同的用户数据库凭据,使用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 $ Revision:313688 $

活动持久连接0

活动连接0

Oracle运行时客户端库11.2.0.2.0版

Oracle Instant Client版本10.2

启用临时Lob支持

已启用收藏集支持

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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