PHP 8.3.4 Released!

pg_unescape_bytea

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

pg_unescape_byteaEntfernt Maskierungen für den Typ bytea

Beschreibung

pg_unescape_bytea(string $string): string

pg_unescape_bytea() entfernt Maskierungen von Daten des PostgreSQL-Typs bytea. Zurückgegeben wird ein String ohne Maskierungen, der möglicherweise Binärdaten enthält.

Hinweis:

Wenn Daten vom Typ bytea mit SELECT ausgewählt werden, gibt PostgreSQL Bytewerte als Oktalzahlen zurück, denen ein '\' vorangestellt ist (z. B. \032). Benutzer müssen diese Werte manuell in ein binäres Format konvertieren.

Diese Funktion setzt PostgreSQL ab der Version 7.2 voraus. Bei PostgreSQ; 7.2.0 und 7.2.1 müssen bytea-Werte konvertiert werden, falls die Multibyte-Unterstützung aktiviert ist, z. B. INSERT INTO test_table (image) VALUES ('$image_escaped'::bytea);. Ab PostgreSQL 7.2.2 müssen die Daten nicht mehr konvertiert werden. Eine Ausnahme gibt es allerdings: wenn die Codierung des Clients und des Datenbankservers einander nicht entsprechen, kann es zu Multibyte-Fehlern kommen. Um diesen Fehler zu vermeiden, muss der Anwender einen Typecast zu bytea machen.

Parameter-Liste

string

Ein String, der Daten vom PostgreSQL-Typ bytea enthält, die in einen PHP-Binärstring konvertiert werden.

Rückgabewerte

Ein String, der die unmaskierten Daten enthält.

Beispiele

Beispiel #1 pg_unescape_bytea()-Beispiel

<?php
// Zur Datenbank verbinden
$dbconn = pg_connect('dbname=foo');

// Die Daten vom Typ bytea holen
$res = pg_query("SELECT data FROM gallery WHERE name='Pine trees'");
$raw = pg_fetch_result($res, 'data');

// In Binärdaten konvertieren und an den Browser senden
header('Content-type: image/jpeg');
echo
pg_unescape_bytea($raw);
?>

Siehe auch

add a note

User Contributed Notes 3 notes

up
5
liviu dot mirea at gmail dot com
13 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)
up
-5
tiagopastorello at gmail dot com
15 years ago
<?php
$conexao
= pg_connect("host=localhost dbname=name user=postgres password=123456") or die('Sorry =( : ' . pg_last_error());

$cod= $_GET['cod'];

$sql = "SELECT * FROM table WHERE cod_field = '$cod'";
$quer = pg_query($conexao, $sql);

$reg = pg_fetch_object($query);

print
pg_unescape_bytea($reg -> field_bytea);

?>
To Top