Annotation of embedaddon/php/ext/pdo_pgsql/tests/bug_33876.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: PDO PgSQL Bug #33876 (PDO misquotes/miscasts bool(false))
3: --SKIPIF--
4: <?php
5: if (!extension_loaded('pdo') || !extension_loaded('pdo_pgsql')) die('skip not loaded');
6: require dirname(__FILE__) . '/config.inc';
7: require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
8: PDOTest::skip();
9: ?>
10: --FILE--
11: <?php
12: require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
13: $db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');
14: $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
15:
16: $db->exec("SET LC_MESSAGES='C'");
17: $db->exec('CREATE TABLE test (foo varchar(5) NOT NULL, bar bool NOT NULL)');
18: $db->exec("INSERT INTO test VALUES('false','f')");
19: $db->exec("INSERT INTO test VALUES('true', 't')");
20:
21: $res = $db->prepare('SELECT foo from test where bar = ?');
22:
23: # this is the portable approach to binding a bool
24: $res->bindValue(1, false, PDO::PARAM_BOOL);
25: if (!$res->execute())
26: print_r($res->errorInfo());
27: else
28: print_r($res->fetchAll(PDO::FETCH_ASSOC));
29:
30: # this is the portable approach to binding a bool
31: $res->bindValue(1, true, PDO::PARAM_BOOL);
32: if (!$res->execute())
33: print_r($res->errorInfo());
34: else
35: print_r($res->fetchAll(PDO::FETCH_ASSOC));
36:
37:
38: # true gets cast to string (because the implied default is string)
39: # true-as-string is 1, so this "works"
40: if (!$res->execute(array(true)))
41: print_r($res->errorInfo());
42: else
43: print_r($res->fetchAll(PDO::FETCH_ASSOC));
44:
45: # Expected to fail; unless told otherwise, PDO assumes string inputs
46: # false -> "" as string, which pgsql doesn't like
47: if (!$res->execute(array(false)))
48: print_r($res->errorInfo());
49: else
50: print_r($res->fetchAll(PDO::FETCH_ASSOC));
51:
52: # And now using emulator prepares
53: echo "EMUL\n";
54:
55:
56: $res = $db->prepare('SELECT foo from test where bar = ?', array(
57: PDO::PGSQL_ATTR_DISABLE_NATIVE_PREPARED_STATEMENT => true));
58:
59: # this is the portable approach to binding a bool
60: $res->bindValue(1, false, PDO::PARAM_BOOL);
61: if (!$res->execute())
62: print_r($res->errorInfo());
63: else
64: print_r($res->fetchAll(PDO::FETCH_ASSOC));
65:
66: # this is the portable approach to binding a bool
67: $res->bindValue(1, true, PDO::PARAM_BOOL);
68: if (!$res->execute())
69: print_r($res->errorInfo());
70: else
71: print_r($res->fetchAll(PDO::FETCH_ASSOC));
72:
73:
74: # true gets cast to string (because the implied default is string)
75: # true-as-string is 1, so this "works"
76: if (!$res->execute(array(true)))
77: print_r($res->errorInfo());
78: else
79: print_r($res->fetchAll(PDO::FETCH_ASSOC));
80:
81: # Expected to fail; unless told otherwise, PDO assumes string inputs
82: # false -> "" as string, which pgsql doesn't like
83: if (!$res->execute(array(false))) {
84: $err = $res->errorInfo();
85: // Strip additional lines ouputted by recent PgSQL versions
86: $err[2] = trim(current(explode("\n", $err[2])));
87: print_r($err);
88: } else {
89: print_r($res->fetchAll(PDO::FETCH_ASSOC));
90: }
91:
92:
93:
94: --EXPECT--
95: Array
96: (
97: [0] => Array
98: (
99: [foo] => false
100: )
101:
102: )
103: Array
104: (
105: [0] => Array
106: (
107: [foo] => true
108: )
109:
110: )
111: Array
112: (
113: [0] => Array
114: (
115: [foo] => true
116: )
117:
118: )
119: Array
120: (
121: [0] => 22P02
122: [1] => 7
123: [2] => ERROR: invalid input syntax for type boolean: ""
124: )
125: EMUL
126: Array
127: (
128: [0] => Array
129: (
130: [foo] => false
131: )
132:
133: )
134: Array
135: (
136: [0] => Array
137: (
138: [foo] => true
139: )
140:
141: )
142: Array
143: (
144: [0] => Array
145: (
146: [foo] => true
147: )
148:
149: )
150: Array
151: (
152: [0] => 22P02
153: [1] => 7
154: [2] => ERROR: invalid input syntax for type boolean: ""
155: )
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>