2012-07-26 146 views
0

當使用相同的查詢,相同的用戶數據庫憑證,使用Toad for Oracle,然後使用PHP函數oci_fetch_assoc時,由幾個列中缺少oci_fetch_assoc返回的數據數組,並且少數列是一起失蹤。所有預期都會出現在蟾蜍結果中。PHP和Toad Oracle查詢結果不同

我在這裏搜索和搜索,沒有解決方案。

蟾蜍正在使用即時客戶端 - 11.2.0.1.0

我的PHP OCI8信息

OCI8支持 - 啓用

1.4.6版

修訂$修訂:313688 $

Active Persistent Connections 0

活動連接0

的Oracle運行時客戶端庫版本11.2.0.2.0

Oracle即時客戶端版本10.2

臨時LOB的支持使

集合啓用支持

回答

0

如果您在PHP和Toad中運行完全相同的查詢,並返回不同的結果,唯一的結論是您的PHP忽略了幾列結果集。

+0

爲什麼會發生這種情況? – Mladen 2012-07-26 11:11:10

+0

因爲代碼沒有被寫入與他們做任何事情? – Fluffeh 2012-07-26 11:12:03

+0

我是var_dump在PHP查詢返回的數組,這些列根本不存在。 – Mladen 2012-07-26 11:15:34

0

當您使用oci_fetch_assoc時,只會返回值不爲NULL的字段。 爲了這個工作,我取COLUMNNAMES與此代碼:

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

編輯:另一種(不太可能)可能是缺少列CLOBS。您需要使用OCI_RETURN_LOBS標誌(請參閱oci_fetch_array