当使用相同的查询、相同的用户DB凭据,使用Toad for Oracle,然后使用PHP函数oci_fetch_assoc时,oci_fetch _assoc返回的数据数组在少数列中丢失,少数列一起丢失。所有预期都出现在Toad结果中。
我在谷歌上搜索了一下,没有找到解决方案。
蟾蜍正在使用即时客户端-11.2.0.1.0
我的PHP oci8信息
OCI8支持-启用
1.4.6版
修订版$修订版:313688$
活动持久连接0
活动连接0
Oracle运行时客户端库11.2.0.2.0版
Oracle Instant Client 10.2版
启用临时Lob支持的
集合支持启用
如果您在PHP和Toad中运行完全相同的查询,但它们返回不同的结果,那么唯一的结论是您的PHP忽略了结果集的几列。
使用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;
}
edit:另一种可能性(可能性较小)是缺少的列是CLOBS。您需要使用OCI_RETURN_LOBS标志(请参阅OCI_fetch_array)