PHP Conference Nagoya 2025

pg_unescape_bytea

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

pg_unescape_bytea Supprime la protection d'une chaîne de type bytea

Description

pg_unescape_bytea(string $string): string

pg_unescape_bytea() supprime la protection des caractères de type bytea. Elle retourne la chaîne de caractères protégée, pouvant contenir des données binaires.

Note:

Lorsque vous utilisez une commande SELECT avec des données de type bytea, PostgreSQL retourne des valeurs octales, préfixées avec des antislashs \ (e.g. \032). Les utilisateurs doivent effectuer la conversion en format binaire eux-mêmes.

pg_escape_bytea() requiert PostgreSQL 7.2 ou plus récent. Avec PostgreSQL 7.2.0 et 7.2.1, les données de type bytea doivent être transtypée lorsque vous activez le support des chaînes de caractères multioctets. i.e. INSERT INTO test_table (image) VALUES ('$image_escaped'::bytea);. PostgreSQL 7.2.2 ou plus récent ne requiert pas cette manipulation. Toutefois, si le client et le serveur n'utilisent pas le même jeu de caractères, il peut arriver des erreurs. Il faut alors forcer le transtypage manuellement pour éviter cette erreur.

Liste de paramètres

string

Une chaîne de caractères contenant les données bytea PostgreSQL à être converties en chaîne de caractères binaire PHP.

Valeurs de retour

Une chaîne de caractères contenant les données protégées.

Exemples

Exemple #1 Exemple avec pg_unescape_bytea()

<?php
// Connexion à la base de données
$dbconn = pg_connect('dbname=foo');

// Récupération des données bytea
$res = pg_query("SELECT data FROM galerie WHERE nom='Arbres Pin'");
$raw = pg_fetch_result($res, 'data');

// Convertit en binaire et envoie au navigateur
header('Content-type: image/jpeg');
echo
pg_unescape_bytea($raw);
?>

Voir aussi

add a note

User Contributed Notes 2 notes

up
5
liviu dot mirea at gmail dot com
14 years ago
PostgreSQL 9.0 introduced "hex" as the new default format for encoding binary data. Because "pg_unescape_bytea" only works with the old "escape" format, you need to do pg_query('SET bytea_output = "escape";'); before executing your select queries.

More details can be found here: http://www.postgresql.org/docs/9.0/static/datatype-binary.html

[Ed: Recent PostgreSQL versions support unescaping the "hex" format.]
up
0
muralito at montevideo dot com dot uy
13 years ago
The workaround is to configure a property in the postgres database for the user, to make postgres behave as the old default.

ALTER USER username SET bytea_output = 'escape';

(or using the pgadmin interface)
To Top