postgresql:从php读取二进制blob
当我试图从数据库中读取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参数设
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");