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

search for in the

pg_escape_string> <pg_end_copy
[edit] Last updated: Fri, 18 Sep 2009

view this page in

pg_escape_bytea

(PHP 4 >= 4.2.0, PHP 5)

pg_escape_bytea Екранира низ за вмъкване в поле от тип bytea

Описание

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

pg_escape_bytea() екранира низ за типа данни bytea. Тя връща екранирания низ.

Забележка: Когато избирате тип bytea със SELECT, 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, за да избегне тази грешка.

Параметри

connection

Ресурс на връзката към базата от данни в PostgreSQL. Когато connection не е наличен, се използва връзката по подразбиране - последната връзка, отворена от pg_connect() или pg_pconnect().

data

Низ, съдържащ текст или двоични данни, който да бъде вмъкнат в колона bytea.

Връщани стойности

Низ с екранираните данни.

Дневник на промените

Версия Описание
5.2.0 Добавен е connection

Примери

Example #1 Пример за pg_escape_bytea()

<?php 
  
// Свързване с базата от данни
  
$dbconn pg_connect('dbname=foo');
  
  
// Прочитане на двоичен файл
  
$data file_get_contents('image1.jpg');
  
  
// Екраниране на двоичните данни
  
$escaped pg_escape_bytea($data);
  
  
// Вмъкване в базата от данни
  
pg_query("INSERT INTO gallery (name, data) VALUES ('Pine trees', '{$escaped}')");
?>

Вж. също



pg_escape_string> <pg_end_copy
[edit] Last updated: Fri, 18 Sep 2009
 
add a note add a note User Contributed Notes pg_escape_bytea - [5 notes]
up
0
Mike-RaWare
2 years ago
To prevent any problems with encoding you could use hexadecimal or base64 input to save and retrieve data to the database:

<?php
 
// Connect to the database
 
$dbconn = pg_connect( 'dbname=foo' );
 
 
// Read in a binary file
 
$data = file_get_contents( 'image1.jpg' );
 
 
// Escape the binary data
 
$escaped = bin2hex( $data );
 
 
// Insert it into the database
 
pg_query( "INSERT INTO gallery (name, data) VALUES ('Pine trees', decode('{$escaped}' , 'hex'))" );

 
// Get the bytea data
 
$res = pg_query("SELECT encode(data, 'base64') AS data FROM gallery WHERE name='Pine trees'"); 
 
$raw = pg_fetch_result($res, 'data');
 
 
// Convert to binary and send to the browser
 
header('Content-type: image/jpeg');
  echo
base64_decode($raw);
?>
up
0
gglockner AT NOSPAMdwaffler DOT com
3 years ago
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)");
?>
up
0
ynzhang from lakeheadu of ca
4 years ago
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
up
0
Mocha
9 years ago
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;
}
?>
up
0
php at tobias dot olsson dot be
10 years ago
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

 
show source | credits | sitemap | contact | advertising | mirror sites