gpt4 book ai didi

php - 在 PostgreSQL 中存储类似 BLOB 的数据

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

我最近从 MySQL 切换到 PostgreSQL。但是我还有一个问题。

以前,我会在 MySQL 中以 BLOB 格式存储小图像。

PostgreSQL 不知道 BLOB 这样的东西。

我尝试改用 BYTEA 字段类型。我猜这实际上插入了一个大的(十六进制?)字符串,但现在我一直试图让这个字符串恢复为在 PHP 中显示实际图像。

有什么想法吗?提前致谢。

这是我用来将图像保存在数据库中的一段代码:

$data = bin2hex(file_get_contents('php://input'));

if (!empty($data)) {
$sql = "UPDATE asset SET data = X'%s' WHERE uuid = '%s'";
$args = array($data, $asset_uuid);
}

使用了 psql (9.1.3) 和 php 5.3.6

最佳答案

Bytea 是一个字节数组。这不是位模式。参见 PostgreSQL Lexical Structure 的第 4.2.1.5 节.

输入 bytea 的正确方法是使用十六进制值的 '\x...'。所以你想要的是 SET data = '\x%s'。

您可能还想使用 pg_prepare 查看准备好的语句.

编辑:我可以通过以下方式将(文本)文件插入到 bytea 中:

$source = file_get_contents( 'hello.php' );
$insert = pg_prepare( $conn, '', 'insert into t (name, data) values($1,$2)' );
pg_execute( $conn, '', array( 'hello.php', $source ) );

第三次编辑:这可以很好地将文件插入数据库。然而,PHP 中的 pgsql 驱动程序非常不礼貌。取回实际数据的唯一方法是使用 bytea 转义机制,详见此处:pg_unescape_bytea .

pg_query('SET bytea_output = "escape";');

$result = pg_query( 'select data from t' );

while ( $row = pg_fetch_row( $result ) ) {
echo pg_unescape_bytea( $row[0] );
}

我很抱歉这很烦人。 PHP 中的 PostgreSQL 接口(interface)可以对二进制值进行一些重大修改。

关于php - 在 PostgreSQL 中存储类似 BLOB 的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11162695/

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