当我尝试从数据库读取 blob 数据时,我得到了这样的结果:
xffd8ffe000104a46494600010201006000600000...
它仅适用于 Windows 操作系统,在 Linux 上它可以正常工作
sql:
select lob from table where id = ...
尝试使用::bytea
,没有任何改变
在 php 中只需使用 PDO 和 file_put_contents
获取
我可以使用 convert_from(lob, 'UTF8')
转换数据,并且它适用于 xml,但我需要一个针对二进制数据(例如 zip)的解决方案
更新: PHP代码
$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']);
最佳答案
当bytea_output
参数设置为hex
时,问题中显示的十六进制字符串是由PostgreSQL 9.0或更高版本生成的。
该问题的一个可能原因是 Windows 上的 PHP 与 9.0 之前的 libpq
链接。这些旧版本不会解码这些内容。
您可以升级到更新的 libpq
,或者作为在选择任何 bytea 值之前可以执行的解决方法:
$db->query("SET bytea_output=escape");
这将(对于当前 session )将 bytea 文本表示恢复为旧版本和新版本的 libpq
都可以解码的旧方式。
关于php - postgresql:从 php 读取二进制 blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15106012/