PHP Conference Japan 2024

pg_unescape_bytea

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

pg_unescape_bytea 取消转义 bytea 类型的二进制数据

说明

pg_unescape_bytea(string $string): string

pg_unescape_bytea() 取消转义 PostgreSQL bytea 数据值。它返回未转义的字符串,可能包含二进制数据。

注意:

SELECT 一个 bytea 类型时,PostgreSQL 返回以 '\' 为前缀的八进制字节值 (例如 \032)。用户需要手动转换回二进制格式。

此函数需要 PostgreSQL 7.2 或更高版本。对于 PostgreSQL 7.2.0 和 7.2.1,启用多字节支持时必须对 bytea 值进行类型转换。例如: INSERT INTO test_table (image) VALUES ('$image_escaped'::bytea); PostgreSQL 7.2.2 或更高版本不需要类型转换。例外情况是客户端和后端字符编码不匹配,并且可能存在多字节流错误。用户必须转换为 bytea 以避免此错误。

参数

string

一个包含要转换为 PHP 二进制字符串的 PostgreSQL bytea 数据的 string

返回值

包含未转义数据的 string

范例

示例 #1 pg_unescape_bytea() 示例

<?php
// 连接到数据库
$dbconn = pg_connect('dbname=foo');

// 获取 bytea 数据
$res = pg_query("SELECT data FROM gallery WHERE name='Pine trees'");
$raw = pg_fetch_result($res, 'data');

// 转换为二进制并发送到浏览器
header('Content-type: image/jpeg');
echo
pg_unescape_bytea($raw);
?>

参见

添加注释

用户贡献的注释 2 个注释

up
5
liviu dot mirea at gmail dot com
14 年前
PostgreSQL 9.0 引入了“hex”作为编码二进制数据的新默认格式。由于“pg_unescape_bytea”仅适用于旧的“escape”格式,因此在执行 select 查询之前需要执行 pg_query('SET bytea_output = "escape";');。

更多详细信息可以在这里找到:https://postgresql.ac.cn/docs/9.0/static/datatype-binary.html

[编者注:最近的 PostgreSQL 版本支持取消转义“hex”格式。]
up
0
muralito at montevideo dot com dot uy
13 年前
解决方法是在 postgres 数据库中为用户配置一个属性,以使 postgres 表现为旧的默认值。

ALTER USER username SET bytea_output = 'escape';

(或使用 pgadmin 界面)
To Top