postgresql:从php读取二进制blob

postgresql:从php读取二进制blob,php,postgresql,pdo,blob,Php,Postgresql,Pdo,Blob,当我试图从数据库中读取blob数据时,我会遇到如下情况: xffd8ffe000104a46494600010201006000600000... 它只在windows操作系统上运行,在linux上它可以正常工作 sql: 尝试使用::bytea,未发生任何更改 在php中,只需使用PDO和文件内容获取 我可以使用convert\u from(lob,'UTF8')转换数据,它可以处理xml,但我需要一个二进制数据的解决方案(例如zip) upd: php代码 当bytea_output参数设

当我试图从数据库中读取blob数据时,我会遇到如下情况:

xffd8ffe000104a46494600010201006000600000...
它只在windows操作系统上运行,在linux上它可以正常工作

sql:

尝试使用
::bytea
,未发生任何更改


在php中,只需使用PDO和
文件内容获取

我可以使用
convert\u from(lob,'UTF8')
转换数据,它可以处理xml,但我需要一个二进制数据的解决方案(例如zip)

upd: php代码


bytea_output
参数设置为
hex
时,问题中显示的十六进制字符串由PostgreSQL 9.0或更高版本生成

出现此问题的一个合理原因是,Windows上的PHP与9.0之前的
libpq
链接。这些旧版本不会解码这些内容

您可以升级到较新的
libpq
,或者在选择任何bytea值之前,您可以先解决以下问题:

$db->query("SET bytea_output=escape");

这将(对于当前会话)将bytea文本表示还原为旧的方式,旧版本和新版本的
libpq
都可以解码。

file\u put\u contents
?请显示您的代码。我已经用php代码更新了主题。您是否尝试过将结果列显式绑定为LOB,如中所示?刚刚尝试过,相同的结果:(感谢您共享此内容!我已经尝试了几天了。)。。
$db = new PDO('pgsql:...');
$pds = $db->prepare("select lob from table where id = :id");
$pds->bindParam('id', $id);
$pds->execute();
$r = $pds->fetch(PDO::FETCH_ASSOC);
file_put_contents('Chrysanthemum.jpg', $r['lob']);
$db->query("SET bytea_output=escape");