pg_escape_bytea

(PHP 4 >= 4.2.0, PHP 5)

pg_escape_bytea — Escape a string for insertion into a bytea field

Описание

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

pg_escape_bytea() escapes string for bytea datatype. It returns escaped string.

Замечание: When you SELECT a bytea type, PostgreSQL returns octal byte values prefixed with '\' (e.g. \032). Users are supposed to convert back to binary format manually.
This function requires PostgreSQL 7.2 or later. With PostgreSQL 7.2.0 and 7.2.1, bytea values must be cast when you enable multi-byte support. i.e. INSERT INTO test_table (image) VALUES ('$image_escaped'::bytea); PostgreSQL 7.2.2 or later does not need a cast. The exception is when the client and backend character encoding does not match, and there may be multi-byte stream error. User must then cast to bytea to avoid this error.

Список параметров

connection

PostgreSQL database connection resource. When connection is not present, the default connection is used. The default connection is the last connection made by pg_connect() or pg_pconnect().

data

A string containing text or binary data to be inserted into a bytea column.

Возвращаемые значения

A string containing the escaped data.

Список изменений

Версия Описание
5.2.0 connection added

Примеры

Пример #1 pg_escape_bytea() example

<?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 pg_escape_bytea($data);
  
  
// Insert it into the database
  
pg_query("INSERT INTO gallery (name, data) VALUES ('Pine trees', '{$escaped}')");
?>

Смотрите также

Коментарии

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($rs00));
?>

/Tobias
2002-08-17 12:56:25
http://php5.kiev.ua/manual/ru/function.pg-escape-bytea.html
Автор:
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;
}
?>
2003-08-07 20:20:07
http://php5.kiev.ua/manual/ru/function.pg-escape-bytea.html
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
2009-02-18 15:44:48
http://php5.kiev.ua/manual/ru/function.pg-escape-bytea.html
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)");
?>
2009-07-17 17:13:51
http://php5.kiev.ua/manual/ru/function.pg-escape-bytea.html
Автор:
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);
?>
2010-07-08 05:03:33
http://php5.kiev.ua/manual/ru/function.pg-escape-bytea.html
Автор:
using  pg_escape_bytea without 'E' escape tag
<?php 
 
// Die Binärdaten maskieren
 
$escaped pg_escape_bytea($data);

 
// und in die Datenbank einfügen (falsch/wrong)
 
pg_query("INSERT INTO gallery (name, data) VALUES ('Pine trees', E'$escaped')");

 
// und in die Datenbank einfügen (richtig/right)
 
pg_query("INSERT INTO gallery (name, data) VALUES ('Pine trees', '$escaped')");
?>
2014-03-12 17:10:39
http://php5.kiev.ua/manual/ru/function.pg-escape-bytea.html
Автор:
PostgreSQL 9.0 introduced a new hexadecimal-based representation for bytea data that is preferred over the escaping mechanism implemented by this function.

<?php
function pg_escape_byteahex($binary)
{
    return 
"E'\\\\x".bin2hex($binary)."'";
}
?>
2017-07-17 05:56:47
http://php5.kiev.ua/manual/ru/function.pg-escape-bytea.html
this method des the same as pg_escape_bytea have fun with it:

public function escape_bytea($data) {
        $escaped = '';

        for ($i = 0; $i < strlen($data); $i++) {
            $char = $data[$i];
            $ascii = ord($char);

            $escaped.= ($ascii < 32 || $ascii > 126 ? sprintf('\\%03o', $ascii) : ($char == '\\' ? '\\\\' : $char) );
        }
        return $escaped;
    }
2024-07-31 10:25:55
http://php5.kiev.ua/manual/ru/function.pg-escape-bytea.html

    Поддержать сайт на родительском проекте КГБ