在Postgres-DB中存储/读取文件

时间:2013-02-21 03:37:47

标签: php postgresql

我正在尝试将数据保存在数据库中,但我无法检索它。 结果不是有效文件。

隔离部分代码,我认为这应该有效:

$content = pg_escape_bytea (file_get_contents($tmp)); //image.jpg   
header('Content-type: ' . $mime); // image/jpg
echo pg_unescape_bytea($content); exit;

$content已存储,但我无法再次阅读!

怎么办?

1 个答案:

答案 0 :(得分:1)

可能的解释是您正在使用此配置:

  • PHP方使用8.4或更早的libpq
  • 服务器为9.0或更新
  • bytea_output config参数保留为其默认值(hex

在这种情况下,pg_unescape_bytea将无法正确解码来自数据库的文本格式的bytea内容。作为一种解决方法,您可以添加到PHP代码:

pg_query("SET bytea_output=escape");

在选择bytea内容之前,看看是否有所作为。如果它确实解决了问题,您可以通过发出以下命令使其成为数据库的持久设置:

ALTER DATABASE mydb SET bytea_output=escape;

直到将libpq升级到更新版本。