gpt4 book ai didi

php - postgresql:从 php 读取二进制 blob

转载 作者:行者123 更新时间:2023-11-29 12:13:50 24 4
gpt4 key购买 nike

当我尝试从数据库中读取 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com