PHP和Toad-Oracle查询结果不同


PHP and Toad Oracle query results are different

当使用相同的查询、相同的用户DB凭据,使用Toad for Oracle,然后使用PHP函数oci_fetch_assoc时,oci_fetch _assoc返回的数据数组在少数列中丢失,少数列一起丢失。所有预期都出现在Toad结果中。

我在谷歌上搜索了一下,没有找到解决方案。

蟾蜍正在使用即时客户端-11.2.0.1.0

我的PHP oci8信息

OCI8支持-启用

1.4.6版

修订版$修订版:313688$

活动持久连接0

活动连接0

Oracle运行时客户端库11.2.0.2.0版

Oracle Instant Client 10.2版

启用临时Lob支持的

集合支持启用

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

使用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
}

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

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;
}

edit:另一种可能性(可能性较小)是缺少的列是CLOBS。您需要使用OCI_RETURN_LOBS标志(请参阅OCI_fetch_array)

获取这些