Edit report at https://bugs.php.net/bug.php?id=53127&edit=1
ID: 53127
Comment by: zlobnynigga at yandex dot ru
Reported by: nakamura at nepsys dot ddo dot jp
Summary: pg_escape_bytea returns a format different from the
expectation
Status: Wont fix
Type: Bug
Package: PostgreSQL related
Operating System: Linux kernel 2.6.27
PHP Version: 5.3.3
Block user comment: N
Private report: N
New Comment:
I have experienced the same issue with PHP 5.3.5 (PHP
5.3.5-1ubuntu7.2ppa1~lucid with Suhosin-Patch). Under Ubuntu Lucid 2.6.32. But
with PHP 5.3.5 under CentOS 2.6.18 there is no such problem. Important thing:
both Ubuntu and CentOS hosts are connected to the same PostgreSQL 9.0.3 with
'bytea_output' set to 'escape' (in postgresql.conf). Therefore, I think that
which behaviour is used DOES NOT depend on the PostgreSQL server version. It
depends on pgsql or pdo_pgsql extensions version (or PHP versions, I have 5.3.5
on both hosts, but they are not the same at least because of some dist specific
things). Unfortunately, PHP under ubuntu can not start with pgsql.so from
CentOS, so I can't make tests I want. But it looks clear: two different PHPs
connect to single PostgreSQL and it results in different behaviour.
Previous Comments:
------------------------------------------------------------------------
[2010-10-22 09:07:17] [email protected]
There's no way in the PQ API to choose the old escaping behaviour --
which behaviour is used depends on the PostgreSQL server version, if
the connection is active.
------------------------------------------------------------------------
[2010-10-21 13:26:21] nakamura at nepsys dot ddo dot jp
Description:
------------
Using PostgreSQL 9.0.1, pg_escape_bytea function returns new "hex" format.
By defaults, PostgreSQL outputs new "hex" format for bytea data.
It is possible to change to "escape" format by modifying the postgresql.conf
file.
I expecting the test script displays "AAA" always.
However, pg_escape_bytea actually returns a different ("hex") format while the
database is connected.
After disconnected, pg_escape_bytea returns correct ("escape") format.
Test script:
---------------
<?php
$link = pg_connect('dbname=template1 user=postgres');
$version = pg_version($link);
print "PostgreSQL version information\n";
var_dump($version);
$result = pg_query($link,"show bytea_output");
$col = pg_fetch_row($result,0);
pg_free_result($result);
print "environment variable: bytea_output\n";
var_dump($col);
print "pg_escape_bytea('AAA') before database connection closing\n";
print pg_escape_bytea('AAA')."\n";
pg_close($link);
print "pg_escape_bytea('AAA') after database connection closing\n";
print pg_escape_bytea('AAA')."\n";
Expected result:
----------------
PostgreSQL version information
array(3) {
["client"]=>
string(5) "9.0.1"
["protocol"]=>
int(3)
["server"]=>
string(5) "9.0.1"
}
environment variable: bytea_output
array(1) {
[0]=>
string(6) "escape"
}
pg_escape_bytea('AAA') before database connection closing
AAA
pg_escape_bytea('AAA') after database connection closing
AAA
Actual result:
--------------
PostgreSQL version information
array(3) {
["client"]=>
string(5) "9.0.1"
["protocol"]=>
int(3)
["server"]=>
string(5) "9.0.1"
}
environment variable: bytea_output
array(1) {
[0]=>
string(6) "escape"
}
pg_escape_bytea('AAA') before database connection closing
\\x414141
pg_escape_bytea('AAA') after database connection closing
AAA
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=53127&edit=1