2017-08-09 42 views
0

我有一个查询返回一个十六进制字符串,而不是一个XML字符串。 Firebird(2.5)该字段被定义为LONG。ibase_query导致十六进制字符串,而不是XML字符串

任何想法,这可能是什么原因造成的? 使用GUI进行检索时(例如:FlySpeed)将检索完整的XML字符串。但在PHP 7上将检索一个HEX字符串。

在此先感谢。

+2

Firebird没有称为'LONG'的类型,这意味着您有一个自创的域名为'LONG'。您需要显示所涉及的表和域的实际代码和DDL。 –

+0

我的不好..字段类型是XML_DATA_STRING ...它似乎是一个自创的域,对吗? – pmoreira

+0

我们都不知道这个域名。来自Mark的评论:“你需要显示所涉及的表和域的实际代码和DDL。” –

回答

0

通过你的BLOB字段这个功能

function bl($field) { 
    $s = ""; 
    if ($field != null) { 
     $blob_data = ibase_blob_info($field); 
     $blob_hndl = ibase_blob_open($field); 
     $s = ibase_blob_get($blob_hndl, $blob_data[0]); 
     ibase_blob_close($blob_hndl); 
    } 
    return $s; 
} 
+0

我会尝试一个以及...但这会增加每个服务器上的连接时间(我必须连接到140 +),对吗?并且还增加其他服务器上的负载而不是抓取数据的负载,对? – pmoreira

+0

@pmoreira blob无论如何都存储在表格之外,所以无论何时您接触到它,它总是一个额外的连接。唯一的另一种方法是将blob字段转换为查询中的varchar(nn)。但是varchar字段长度受限制。 –

0

找到一种方法来检索所有必要的字段作为文本字符串。

while ($row = ibase_fetch_assoc($sth,IBASE_TEXT)) { 
       $res[] = $row; 
      } 

现在数据被检索为文本字符串。 尽管执行时间现在更长。

相关问题