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

标签 php postgresql pdo blob

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

相关文章:

php - 我可以在 PHP 中混合使用 MySQL API 吗?

php - 如何在 Laravel 中对多个列使用相同的类别 id?

python - 将选择分组依据的结果复制到表中

python - django.db.utils.OperationalError : could not connect to server: No such file or directory

php - 我可以在 PHP 中混合使用 MySQL API 吗?

php - PDO::fetch() 限制 1

php - 清理无法解析的 csv 文件的简单方法是什么

php - Paypal ipn 脚本不起作用

php - 如何从多维数组中插入排序数据

mysql - 进行数据同步时检查已删除项目的最佳方法?