summaryrefslogtreecommitdiff
path: root/ext/pdo_pgsql/tests/bug64953.phpt
diff options
context:
space:
mode:
Diffstat (limited to 'ext/pdo_pgsql/tests/bug64953.phpt')
-rw-r--r--ext/pdo_pgsql/tests/bug64953.phpt71
1 files changed, 71 insertions, 0 deletions
diff --git a/ext/pdo_pgsql/tests/bug64953.phpt b/ext/pdo_pgsql/tests/bug64953.phpt
new file mode 100644
index 000000000..6e72bcab6
--- /dev/null
+++ b/ext/pdo_pgsql/tests/bug64953.phpt
@@ -0,0 +1,71 @@
+--TEST--
+PDO PgSQL Bug #64953 (Postgres prepared statement positional parameter casting)
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo') || !extension_loaded('pdo_pgsql')) die('skip not loaded');
+require dirname(__FILE__) . '/config.inc';
+require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
+PDOTest::skip();
+?>
+--FILE--
+<?php
+echo "Test\n";
+
+require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
+$pdo = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');
+$pdo->setAttribute (\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
+
+echo "Taken from the bug report:\n";
+
+$st = $pdo->prepare('SELECT ?::char as i');
+$st->bindValue(1, '1');
+$st->execute();
+var_dump($st->fetch()); // return false
+
+
+$st = $pdo->prepare('SELECT (?)::char as i');
+$st->bindValue(1, '1');
+$st->execute();
+var_dump($st->fetch()); // return array(1) { ["i"]=> string(1) "1" }
+
+echo "Something more nasty:\n";
+
+$st = $pdo->prepare("SELECT :int::int as i");
+$st->execute(array(":int" => 123));
+var_dump($st->fetch());
+
+$st = $pdo->prepare("SELECT '''?'''::text as \":text\"");
+$st->execute();
+var_dump($st->fetch());
+
+?>
+Done
+--EXPECT--
+Test
+Taken from the bug report:
+array(2) {
+ ["i"]=>
+ string(1) "1"
+ [0]=>
+ string(1) "1"
+}
+array(2) {
+ ["i"]=>
+ string(1) "1"
+ [0]=>
+ string(1) "1"
+}
+Something more nasty:
+array(2) {
+ ["i"]=>
+ string(3) "123"
+ [0]=>
+ string(3) "123"
+}
+array(2) {
+ [":text"]=>
+ string(3) "'?'"
+ [0]=>
+ string(3) "'?'"
+}
+Done