downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

pg_escape_string> <pg_end_copy
Last updated: Fri, 14 Aug 2009

view this page in

pg_escape_bytea

(PHP 4 >= 4.2.0, PHP 5)

pg_escape_bytea Protège une chaîne pour insertion dans un champ bytea

Description

string pg_escape_bytea ([ resource $connection ], string $data )

pg_escape_bytea() protège les caractères de la chaîne data avec le mode bytea. La chaîne protégée est retournée.

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 '\' (par exemple \032). Les utilisateurs doivent effectuer la conversion en format binaire manuellement.
pg_escape_bytea() requiert PostgreSQL 7.2 ou plus récent. Avec PostgreSQL 7.2.0 et 7.2.1, les données bytea doivent être transtypée lorsque vous activez le support des chaînes de caractères multioctets. C'est-à-dire 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.

Liste de paramètres

connection

Ressource de connexion à une base de données PostgreSQL. Lorsque connection n'est pas présent, la connexion par défaut est utilisée. La connexion par défaut est la dernière connexion créée par la fonction pg_connect() ou la fonction pg_pconnect().

data

Une chaîne de caractères contenant du texte ou des données binaires qui seront insérées dans la colonne bytea.

Valeurs de retour

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

Historique

Version Description
5.2.0 Le paramètre connection a été ajouté.

Exemples

Exemple #1 Exemple avec pg_escape_bytea()

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

// Lecture d'un fichier binaire
$data file_get_contents('image1.jpg');

// Échappement des données binaires
$escaped pg_escape_bytea($data);

// Insertion dans la base de données
pg_query("INSERT INTO gallery (name, data) VALUES ('Pine trees', '{$escaped}')");
?>

Voir aussi



pg_escape_string> <pg_end_copy
Last updated: Fri, 14 Aug 2009
 
add a note add a note User Contributed Notes
pg_escape_bytea
gglockner AT NOSPAMdwaffler DOT com
17-Jul-2009 09:13
If you're getting errors about nonstandard use of \\ in a string literal, then you need to escape the encoded bytea as follows:

<?php
$escaped
= pg_escape_bytea($data);
pg_query("INSERT INTO gallery (name, data) VALUES ('Pine trees', E'$escaped'::bytea)");
?>
ynzhang from lakeheadu of ca
18-Feb-2009 09:44
The reason pg_unescape_bytea() do not exactly reproduce the binary data created by pg_escape_bytea() is because the backslash \ and single quote ' are double escaped by the pg_escape_bytea() function. This will lead to image seems corrupted when retrieve from the bytea field. The proper way to escape&unescape a binary string into a PG bytea field as follow:

<?php
$escaped_data
= str_replace(array("\\\\", "''"), array("\\", "'"), pg_escape_bytea($data));
/* and later unescape the escaped data from the bytea field with following to get the original binary data */

$original_data = pg_unescape_bytea($escaped_data));
?>

more details at: http://archives.postgresql.org/pgsql-php/2007-02/msg00014.php
Mocha
08-Aug-2003 12:20
to unescape_bytea use stripcslashes(). If you need to escape bytea and don't have pg_escape_bytea() function then use:

<?php
function escByteA($binData) {
 
/**
   * \134 = 92 = backslash, \000 = 00 = NULL, \047 = 39 = Single Quote
   *
   * str_replace() replaces the searches array in order. Therefore, we must
   * process the 'backslash' character first. If we process it last, it'll
   * replace all the escaped backslashes from the other searches that came
   * before.
   */
 
$search = array(chr(92), chr(0), chr(39));
 
$replace = array('\\\134', '\\\000', '\\\047');
 
$binData = str_replace($search, $replace, $binData);
  return
$binData;
 
//echo "<pre>$binData</pre>";
  //exit;
}
?>
php at tobias dot olsson dot be
17-Aug-2002 04:56
if you need to change back bytea from the db to normal data, this will do that:

<?php
function pg_unescape_bytea($bytea) {
return eval(
"return \"".str_replace('$', '\\$', str_replace('"', '\\"', $bytea))."\";");
}

// use like this
$rs = pg_query($conn, "SELECT image from images LIMIT 1");
$image = pg_unescape_bytea(pg_fetch_result($rs, 0, 0));
?>

/Tobias

pg_escape_string> <pg_end_copy
Last updated: Fri, 14 Aug 2009
 
 
show source | credits | sitemap | contact | advertising | mirror sites