--- embedaddon/php/ext/pgsql/tests/08escape.phpt 2012/02/21 23:47:59 1.1.1.1 +++ embedaddon/php/ext/pgsql/tests/08escape.phpt 2013/10/14 08:02:28 1.1.1.3 @@ -11,8 +11,9 @@ define('FILE_NAME', dirname(__FILE__) . '/php.gif'); // pg_escape_string() test $before = "ABC\\ABC\'"; $expect = "ABC\\\\ABC\\'"; +$expect2 = "ABC\\\\ABC\\\\''"; //the way escape string differs from PostgreSQL 9.0 $after = pg_escape_string($before); -if ($expect === $after) { +if ($expect === $after || $expect2 === $after) { echo "pg_escape_string() is Ok\n"; } else { @@ -47,22 +48,57 @@ $sql = "INSERT INTO ".$table_name." (num, bin) VALUES pg_query($db, $sql); // Retrieve binary from DB -$sql = "SELECT bin::bytea FROM ".$table_name." WHERE num = -9999"; -$result = pg_query($db, $sql); -$row = pg_fetch_array($result, 0, PGSQL_ASSOC); +for ($i = 0; $i < 2; $i++) { + $sql = "SELECT bin::bytea FROM ".$table_name." WHERE num = -9999"; + $result = pg_query($db, $sql); + $row = pg_fetch_array($result, 0, PGSQL_ASSOC); -if ($data === pg_unescape_bytea($row['bin'])) { - echo "pg_escape_bytea() actually works with database\n"; + if ($data === pg_unescape_bytea($row['bin'])) { + echo "pg_escape_bytea() actually works with database\n"; + break; + } + elseif (!$i) { + // Force bytea escaping and retry + @pg_query($db, "SET bytea_output = 'escape'"); + } + else { + $result = pg_query($db, $sql); + echo "pg_escape_bytea() is broken\n"; + break; + } } + +// pg_escape_literal/pg_escape_identifier +$before = "ABC\\ABC\'"; +$expect = " E'ABC\\\\ABC\\\\'''"; +$after = pg_escape_literal($before); +if ($expect === $after) { + echo "pg_escape_literal() is Ok\n"; +} else { - echo "pg_escape_bytea() is broken\n"; + echo "pg_escape_literal() is NOT Ok\n"; + var_dump($before); + var_dump($after); + var_dump($expect); } +$before = "ABC\\ABC\'"; +$expect = "\"ABC\ABC\'\""; +$after = pg_escape_identifier($before); +if ($expect === $after) { + echo "pg_escape_identifier() is Ok\n"; +} +else { + echo "pg_escape_identifier() is NOT Ok\n"; + var_dump($before); + var_dump($after); + var_dump($expect); +} + ?> --EXPECT-- -pg_escape_string() is NOT Ok -string(9) "ABC\ABC\'" -string(12) "ABC\\ABC\\''" -string(10) "ABC\\ABC\'" +pg_escape_string() is Ok pg_escape_bytea() is Ok pg_escape_bytea() actually works with database +pg_escape_literal() is Ok +pg_escape_identifier() is Ok