Annotation of embedaddon/php/ext/mysqli/tests/mysqli_ps_select_union.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: Prepared Statements and SELECT UNION
3: --SKIPIF--
4: <?php
5: require_once('skipif.inc');
6: require_once('skipifemb.inc');
7: require_once('skipifconnectfailure.inc');
8: ?>
9: --FILE--
10: <?php
11: require_once("connect.inc");
12: require_once("table.inc");
13:
14: // Regular (non-prepared) queries
15: print "Using CAST('somestring' AS CHAR)...\n";
16: if (!($res = $link->query("SELECT CAST('one' AS CHAR) AS column1 UNION SELECT CAST('three' AS CHAR) UNION SELECT CAST('two' AS CHAR)")))
17: printf("[001] [%d] %s\n", $link->errno, $link->error);
18:
19: $data = array();
20: while ($row = $res->fetch_assoc()) {
21: $data[] = $row['column1'];
22: var_dump($row['column1']);
23: }
24: $res->free();
25:
26: // Prepared Statements
27: if (!($stmt = $link->prepare("SELECT CAST('one' AS CHAR) AS column1 UNION SELECT CAST('three' AS CHAR) UNION SELECT CAST('two' AS CHAR)")))
28: printf("[002] [%d] %s\n", $link->errno, $link->error);
29:
30: $column1 = null;
31: if (!$stmt->execute() || !$stmt->bind_result($column1))
32: printf("[003] [%d] %s\n", $stmt->errno, $stmt->error);
33:
34: $index = 0;
35: while ($stmt->fetch()) {
36: if ($data[$index] != $column1) {
37: printf("[004] Row %d, expecting %s/%s got %s/%s\n",
38: $index + 1, gettype($data[$index]), $data[$index], gettype($column1), $column1);
39: }
40: $index++;
41: }
42: $stmt->close();
43:
44: if ($IS_MYSQLND) {
45: /*
46: Advantage mysqlnd -
47: The metadata mysqlnd has availabe after prepare is better than
48: the one made availabe by the MySQL Client Library (libmysql).
49: "libmysql" will give wrong results and that is OK -
50: http://bugs.mysql.com/bug.php?id=47483
51: */
52: if (!($stmt = $link->prepare("SELECT CAST('one' AS CHAR) AS column1 UNION SELECT CAST('three' AS CHAR) UNION SELECT CAST('two' AS CHAR)")))
53: printf("[005] [%d] %s\n", $link->errno, $link->error);
54:
55: $column1 = null;
56: /* Note: bind_result before execute */
57: if (!$stmt->bind_result($column1) || !$stmt->execute())
58: printf("[006] [%d] %s\n", $stmt->errno, $stmt->error);
59:
60: $index = 0;
61: while ($stmt->fetch()) {
62: if ($data[$index] != $column1) {
63: printf("[007] Row %d, expecting %s/%s got %s/%s\n",
64: $index + 1, gettype($data[$index]), $data[$index], gettype($column1), $column1);
65: }
66: $index++;
67: }
68: $stmt->close();
69: }
70:
71: // Regular (non-prepared) queries
72: print "Mixing CAST('somestring'AS CHAR), integer and CAST(integer AS CHAR)...\n";
73: if (!($res = $link->query("SELECT 1 AS column1 UNION SELECT CAST('three' AS CHAR) UNION SELECT CAST(2 AS CHAR)")))
74: printf("[008] [%d] %s\n", $link->errno, $link->error);
75:
76: $data = array();
77: while ($row = $res->fetch_assoc()) {
78: $data[] = $row['column1'];
79: }
80: $res->free();
81:
82: // Prepared Statements
83: if (!($stmt = $link->prepare("SELECT 1 AS column1 UNION SELECT CAST('three' AS CHAR) UNION SELECT CAST(2 AS CHAR)")))
84: printf("[009] [%d] %s\n", $link->errno, $link->error);
85:
86: $column1 = null;
87: if (!$stmt->execute() || !$stmt->bind_result($column1))
88: printf("[010] [%d] %s\n", $stmt->errno, $stmt->error);
89:
90: $index = 0;
91: while ($stmt->fetch()) {
92: if ($data[$index] != $column1) {
93: printf("[011] Row %d, expecting %s/%s got %s/%s\n",
94: $index + 1, gettype($data[$index]), $data[$index], gettype($column1), $column1);
95: }
96: var_dump($column1);
97: $index++;
98: }
99: $stmt->close();
100:
101: if ($IS_MYSQLND) {
102: /* Advantage mysqlnd - see above... */
103: if (!($stmt = $link->prepare("SELECT 1 AS column1 UNION SELECT CAST('three' AS CHAR) UNION SELECT CAST(2 AS CHAR)")))
104: printf("[012] [%d] %s\n", $link->errno, $link->error);
105:
106: $column1 = null;
107: if (!$stmt->bind_result($column1) || !$stmt->execute())
108: printf("[013] [%d] %s\n", $stmt->errno, $stmt->error);
109:
110: $index = 0;
111: while ($stmt->fetch()) {
112: if ($data[$index] != $column1) {
113: printf("[014] Row %d, expecting %s/%s got %s/%s\n",
114: $index + 1, gettype($data[$index]), $data[$index], gettype($column1), $column1);
115: }
116: $index++;
117: }
118: $stmt->close();
119: }
120:
121: print "Using integer only...\n";
122: if (!($res = $link->query("SELECT 1 AS column1 UNION SELECT 303 UNION SELECT 2")))
123: printf("[015] [%d] %s\n", $link->errno, $link->error);
124:
125: $data = array();
126: while ($row = $res->fetch_assoc()) {
127: $data[] = $row['column1'];
128: }
129: $res->free();
130:
131: // Prepared Statements
132: if (!($stmt = $link->prepare("SELECT 1 AS column1 UNION SELECT 303 UNION SELECT 2")))
133: printf("[016] [%d] %s\n", $link->errno, $link->error);
134:
135: $column1 = null;
136: if (!$stmt->execute() || !$stmt->bind_result($column1))
137: printf("[017] [%d] %s\n", $stmt->errno, $stmt->error);
138:
139: $index = 0;
140: while ($stmt->fetch()) {
141: if ($data[$index] != $column1) {
142: printf("[018] Row %d, expecting %s/%s got %s/%s\n",
143: $index + 1, gettype($data[$index]), $data[$index], gettype($column1), $column1);
144: }
145: var_dump($column1);
146: $index++;
147: }
148: $stmt->close();
149:
150: if ($IS_MYSQLND) {
151: /* Advantage mysqlnd - see above */
152: if (!($stmt = $link->prepare("SELECT 1 AS column1 UNION SELECT 303 UNION SELECT 2")))
153: printf("[019] [%d] %s\n", $link->errno, $link->error);
154:
155: $column1 = null;
156: if (!$stmt->bind_result($column1) || !$stmt->execute())
157: printf("[020] [%d] %s\n", $stmt->errno, $stmt->error);
158:
159: $index = 0;
160: while ($stmt->fetch()) {
161: if ($data[$index] != $column1) {
162: printf("[021] Row %d, expecting %s/%s got %s/%s\n",
163: $index + 1, gettype($data[$index]), $data[$index], gettype($column1), $column1);
164: }
165: $index++;
166: }
167: $stmt->close();
168: }
169:
170: print "Testing bind_param(), strings only...\n";
171: $two = 'two';
172: $three = 'three';
173: if (!($stmt = $link->prepare("SELECT 'one' AS column1 UNION SELECT ? UNION SELECT ?")))
174: printf("[022] [%d] %s\n", $stmt->errno, $stmt->error);
175:
176: $column1 = null;
177: if (!$stmt->bind_param('ss', $three, $two) || !$stmt->execute() || !$stmt->bind_result($column1))
178: printf("[023] [%d] %s\n", $stmt->errno, $stmt->error);
179:
180: $index = 0;
181: $data = array();
182: while ($stmt->fetch()) {
183: $data[$index++] = $column1;
184: var_dump($column1);
185: }
186: $stmt->close();
187:
188: if ($IS_MYSQLND) {
189: /* Advantage mysqlnd - see above */
190: $two = 'two';
191: $three = 'three';
192: if (!($stmt = $link->prepare("SELECT 'one' AS column1 UNION SELECT ? UNION SELECT ?")))
193: printf("[024] [%d] %s\n", $stmt->errno, $stmt->error);
194:
195: $column1 = null;
196: if (!$stmt->bind_param('ss', $three, $two) || !$stmt->bind_result($column1) || !$stmt->execute())
197: printf("[025] [%d] %s\n", $stmt->errno, $stmt->error);
198:
199: $index = 0;
200: while ($stmt->fetch()) {
201: if ($data[$index] != $column1) {
202: printf("[26] Row %d, expecting %s/%s, got %s/%s\n",
203: $index + 1, gettype($data[$index]), $data[$index], gettype($column1), $column1);
204: }
205: $index++;
206: }
207: $stmt->close();
208: }
209:
210: print "Testing bind_param(), strings only, with CAST AS CHAR...\n";
211: $two = 'two';
212: $three = 'three beers are more than enough';
213: if (!($stmt = $link->prepare("SELECT CAST('one' AS CHAR) AS column1 UNION SELECT CAST(? AS CHAR) UNION SELECT CAST(? AS CHAR)")))
214: printf("[027] [%d] %s\n", $stmt->errno, $stmt->error);
215:
216: $column1 = null;
217: if (!$stmt->bind_param('ss', $three, $two) || !$stmt->execute() || !$stmt->bind_result($column1))
218: printf("[028] [%d] %s\n", $stmt->errno, $stmt->error);
219:
220: $index = 0;
221: $data = array();
222: while ($stmt->fetch()) {
223: $data[$index++] = $column1;
224: var_dump($column1);
225: }
226: $stmt->close();
227:
228: if ($IS_MYSQLND) {
229: /* Advantage mysqlnd - see above */
230: $two = 'two';
231: $three = 'three beers are more than enough';
232: if (!($stmt = $link->prepare("SELECT CAST('one' AS CHAR) AS column1 UNION SELECT CAST(? AS CHAR) UNION SELECT CAST(? AS CHAR)")))
233: printf("[029] [%d] %s\n", $stmt->errno, $stmt->error);
234:
235: $column1 = null;
236: if (!$stmt->bind_param('ss', $three, $two) || !$stmt->bind_result($column1) || !$stmt->execute())
237: printf("[030] [%d] %s\n", $stmt->errno, $stmt->error);
238:
239: $index = 0;
240: while ($stmt->fetch()) {
241: if ($data[$index] != $column1) {
242: printf("[31] Row %d, expecting %s/%s, got %s/%s\n",
243: $index + 1, gettype($data[$index]), $data[$index], gettype($column1), $column1);
244: }
245: $index++;
246: }
247: $stmt->close();
248: }
249:
250: $link->close();
251:
252: print "done!";
253: ?>
254: --EXPECTF--
255: Using CAST('somestring' AS CHAR)...
256: %unicode|string%(3) "one"
257: %unicode|string%(5) "three"
258: %unicode|string%(3) "two"
259: Mixing CAST('somestring'AS CHAR), integer and CAST(integer AS CHAR)...
260: %unicode|string%(1) "1"
261: %unicode|string%(5) "three"
262: %unicode|string%(1) "2"
263: Using integer only...
264: int(1)
265: int(303)
266: int(2)
267: Testing bind_param(), strings only...
268: %unicode|string%(3) "one"
269: %unicode|string%(5) "three"
270: %unicode|string%(3) "two"
271: Testing bind_param(), strings only, with CAST AS CHAR...
272: %unicode|string%(3) "one"
273: %unicode|string%(32) "three beers are more than enough"
274: %unicode|string%(3) "two"
275: done!
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>