0

Toad for Oracle と PHP 関数 oci_fetch_assoc を使用して、同じクエリ、同じユーザー DB 資格情報を使用すると、oci_fetch_assoc によって返されるデータ配列がいくつかの列で欠落し、いくつかの列がすべて欠落します。予想されるすべてが Toad の結果に表示されます。

ここでグーグルで検索しましたが、解決策はありません。

Toad は Instant Client を使用しています - 11.2.0.1.0

私のPHP oci8情報

OCI8 サポート - 有効

バージョン 1.4.6

リビジョン $リビジョン: 313688 $

アクティブな固定接続 0

アクティブな接続 0

Oracle ランタイム クライアント ライブラリ バージョン 11.2.0.2.0

Oracle インスタント クライアント バージョン 10.2

一時的なロブのサポートが有効

コレクションのサポートが有効

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
}

次に、私のフェッチ関数は次のようになります。

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

編集:別の(可能性は低い)可能性は、欠落している列がCLOBであるということです。OCI_RETURN_LOBSフラグを持つものをフェッチする必要があります(oci_fetch_arrayを参照) 。

于 2012-07-26T14:41:00.180 に答える
0

PHP と Toad でまったく同じクエリを実行し、異なる結果が返された場合、唯一の結論は、PHP が結果セットのいくつかの列を無視していることです。

于 2012-07-26T11:07:48.947 に答える