PHP和Toad Oracle查询结果不同

PHP和Toad Oracle查询结果不同,php,oracle,toad,Php,Oracle,Toad,当使用相同的查询、相同的用户DB凭据时,使用Toad for Oracle,然后使用PHP函数oci_fetch_assoc,oci_fetch_assoc返回的数据数组在几列中丢失,并且几列一起丢失。所有预期结果都出现在Toad结果中 我在这里搜索,没有找到答案 Toad正在使用即时客户端-11.2.0.1.0 我的PHP oci8信息 OCI8支持-启用 版本1.4.6 修订$修订:313688$ 活动的持久连接0 活动连接0 Oracle运行时客户端库版本11.2.0.2.0 Oracle

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

我在这里搜索,没有找到答案

Toad正在使用即时客户端-11.2.0.1.0

我的PHP oci8信息

OCI8支持-启用

版本1.4.6

修订$修订:313688$

活动的持久连接0

活动连接0

Oracle运行时客户端库版本11.2.0.2.0

Oracle即时客户端版本10.2

已启用临时Lob支持


集合支持已启用

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

当您使用oci\u fetch\u assoc时,将只返回值不为NULL的字段。 为了处理此问题,我使用以下代码获取列名:

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

编辑:另一种(不太可能的)可能性是缺少的列是CLOB。您需要获取带有OCI_RETURN_LOBS标志的数组(请参见)

I'm var_转储PHP查询返回的数组,那里根本不存在列。在转储数组时,代码已经创建了数组。如果代码正在为特定列创建数组,那么在创建数组时它已经更改了。好的,那么为什么它要更改数组呢?没有代码可以改变数组,数组应该是原始的查询结果。你可以发布你在Toad和PHP中运行的查询,以及PHP运行以创建输出的代码,我们可以看看:)我想我有点跳枪了,这仍然是个问题。我无法发布查询本身,因为它是一个工作项,但以下是php代码:
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;
}