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. Возвращает экранированную строку.

Замечание:

При выборке SQL функцией SELECT данных типа bytea PostgreSQL возвращает значения в восьмеричной системе счисления с префиксом '\' (такие как \032). Пользователю необходимо вручную преобразовывать их в двоичный формат.

Функция поддерживается PostgreSQL версии 7.2 и выше. Для версий 7.2.0 и 7.2.1 значения должны быть преобразованы к типу bytea, когда включена мультибайтовая поддержка. Тогда как INSERT INTO test_table (image)VALUES ('$image_escaped'::bytea); в PostgreSQL 7.2.2 и выше не требует каких-либо преобразований. Исключение составляет случай, когда клиентская (frontend) кодировка не соответствует серверной (backend). При этом возникает ошибка мультибайтового потока, и пользователь должен привести данные к типу bytea, чтобы ее избежать.

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

connection

Ресурс подключения к базе данных PostgreSQL. Если параметр connection не задан, будет использовано подключение по умолчанию - последнее соединение, открытое функцией pg_connect() или pg_pconnect().

data

Строка, содержащая двоичные данные в виде текста, которые требуется поместить в поле типа bytea.

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

Возвращает строку, в которой экранированы все необходимые символы.

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

Версия Описание
5.2.0 Добавлен аргумент connection

Примеры

Пример #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_unescape_bytea() - Убирает экранирование двоичных данных типа bytea
  • pg_escape_string() - Экранирование спецсимволов в строке запроса

Коментарии

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

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