当使用相同的查询,相同的用户数据库凭据,使用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 $ Revision:313688 $
活动持久连接0
活动连接0
Oracle运行时客户端库11.2.0.2.0版
Oracle Instant Client版本10.2
启用临时Lob支持
已启用收藏集支持
答案 0 :(得分:0)
如果你在PHP和Toad中运行完全相同的查询,并且它们返回不同的结果,唯一的结论是你的PHP忽略了结果集的几列。
答案 1 :(得分: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
}
然后我的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;
}
编辑:另一种(不太可能)的可能性是缺少的列是CLOBS。您需要获取具有OCI_RETURN_LOBS标志的那些(请参阅oci_fetch_array)