【问题标题】:PHP and Toad Oracle query results are differentPHP 和 Toad Oracle 查询结果不同
【发布时间】:2012-07-24 22:59:39
【问题描述】:

当使用 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 Instant Client 10.2 版

启用临时 Lob 支持

集合支持启用

【问题讨论】:

    标签: php oracle toad


    【解决方案1】:

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

    【讨论】:

    • 我正在 var_dumping PHP 中查询返回的数组,列根本不存在。
    • 代码在你转储它时已经创建了数组。如果代码为特定列创建数组,则在您创建数组时它已经更改。
    • 好的,那为什么它改变了数组呢?并且没有代码会改变数组,数组应该只是原始查询结果。
    • 您如何发布您在 Toad 和 PHP 中运行的查询以及 PHP 运行以创建输出的代码,我们可以看看:)
    • 我想我有点过头了,这仍然是个问题。我不能发布查询本身,因为它是一项工作,但这是 php 代码:
    【解决方案2】:

    当您使用 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;
    }
    

    edit:另一种(不太可能)的可能性是缺少的列是 CLOBS。您需要获取带有 OCI_RETURN_LOBS 标志的那些(请参阅oci_fetch_array

    【讨论】:

      猜你喜欢
      • 2012-07-06
      • 2022-06-21
      • 2013-09-07
      • 1970-01-01
      • 2022-10-12
      • 2019-06-25
      • 2016-02-08
      • 1970-01-01
      • 2014-07-28
      相关资源
      最近更新 更多