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): 字串

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 以避免此錯誤。

參數

字串

一個包含 PostgreSQL bytea 資料的 字串,將被轉換為 PHP 二進位字串。

傳回值

包含未跳脫資料的 字串

範例

範例 #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 則筆記

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.dev.org.tw/docs/9.0/static/datatype-binary.html

[編者註:最新的 PostgreSQL 版本支援對「hex」格式進行反跳脫。]
muralito at montevideo dot com dot uy
13 年前
解決方法是在 postgres 資料庫中為使用者設定一個屬性,使 postgres 的行為與舊的預設值相同。

ALTER USER username SET bytea_output = 'escape';

(或使用 pgadmin 介面)
To Top