Annotation of embedaddon/php/ext/mysqli/tests/mysqli_stmt_bind_result_references.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: mysqli_stmt_bind_result() - playing with references
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('table.inc');
12:
13: $stmt = mysqli_stmt_init($link);
14: if (!mysqli_stmt_prepare($stmt, "SELECT id, label FROM test ORDER BY id LIMIT 1"))
15: printf("[001] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
16:
17: if (!mysqli_stmt_prepare($stmt, "SELECT id, label FROM test ORDER BY id LIMIT 1"))
18: printf("[001] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
19:
20:
21: print "plain vanilla...\n";
22: unset($id); unset($label);
23: $id = $label = null;
24: if (true !== ($tmp = mysqli_stmt_bind_result($stmt, $id, $label)))
25: printf("[002] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
26:
27: if (!mysqli_stmt_execute($stmt) || !mysqli_stmt_fetch($stmt) || mysqli_stmt_fetch($stmt))
28: printf("[003] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
29:
30: var_dump($id);
31: var_dump($label);
32:
33:
34: print "reference, one level...\n";
35: unset($id); unset($id_ref); unset($label); unset($label_ref);
36: $id = null;
37: $id_ref = &$id;
38: $label = null;
39: $label_ref = &$label;
40:
41: if (true !== ($tmp = mysqli_stmt_bind_result($stmt, $id_ref, $label_ref)))
42: printf("[004] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
43:
44: if (!mysqli_stmt_execute($stmt) || !mysqli_stmt_fetch($stmt) || mysqli_stmt_fetch($stmt))
45: printf("[005] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
46: var_dump($id_ref);
47: var_dump($id);
48: var_dump($label_ref);
49: var_dump($label);
50:
51:
52: print "reference, two levels...\n";
53: unset($id); unset($id_ref); unset($id_ref_ref); unset($label); unset($label_ref); unset($label_ref_ref);
54: $id = null;
55: $id_ref = &$id;
56: $id_ref_ref = &$id_ref;
57: $label = null;
58: $label_ref = &$label;
59: $label_ref_ref = &$label_ref;
60:
61: if (true !== ($tmp = mysqli_stmt_bind_result($stmt, $id_ref_ref, $label_ref_ref)))
62: printf("[006] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
63:
64: if (!mysqli_stmt_execute($stmt) || !mysqli_stmt_fetch($stmt) || mysqli_stmt_fetch($stmt))
65: printf("[007] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
66: var_dump($id_ref_ref);
67: var_dump($id_ref);
68: var_dump($id);
69: var_dump($label_ref_ref);
70: var_dump($label_ref);
71: var_dump($label);
72:
73: print "reference, \$GLOBALS...\n";
74: unset($id); unset($id_ref); unset($label); unset($label_ref);
75: $id = 100;
76: $id_ref = &$GLOBALS['id'];
77: $label = null;
78: $label_ref = &$GLOBALS['label'];
79:
80: if (true !== ($tmp = mysqli_stmt_bind_result($stmt, $id_ref, $label_ref)))
81: printf("[008] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
82:
83: if (!mysqli_stmt_execute($stmt) || !mysqli_stmt_fetch($stmt) || mysqli_stmt_fetch($stmt))
84: printf("[009] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
85: var_dump($id_ref);
86: var_dump($id);
87: var_dump($label_ref);
88: var_dump($label);
89:
90: print "reference, same target...\n";
91: $id = null;
92: $label = &$id;
93:
94: if (true !== ($tmp = mysqli_stmt_bind_result($stmt, $id, $label)))
95: printf("[010] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
96:
97: if (!mysqli_stmt_execute($stmt) || !mysqli_stmt_fetch($stmt) || mysqli_stmt_fetch($stmt))
98: printf("[011] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
99:
100: var_dump($id);
101: var_dump($label);
102:
103: print "reference, simple object...\n";
104: unset($obj);
105: $obj = new stdClass();
106: $obj->id = null;
107: $obj->label = null;
108:
109: if (true !== ($tmp = mysqli_stmt_bind_result($stmt, $obj->id, $obj->label)))
110: printf("[012] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
111:
112: if (!mysqli_stmt_execute($stmt) || !mysqli_stmt_fetch($stmt) || mysqli_stmt_fetch($stmt))
113: printf("[013] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
114:
115: var_dump($obj->id);
116: var_dump($obj->label);
117:
118:
119: print "reference, simple object w reference...\n";
120: unset($id); unset($label); unset($obj);
121: $obj = new stdClass();
122: $obj->id = null;
123: $obj->label = null;
124: $id = &$obj->id;
125: $label = &$obj->label;
126:
127: if (true !== ($tmp = mysqli_stmt_bind_result($stmt, $id, $label)))
128: printf("[012] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
129:
130: if (!mysqli_stmt_execute($stmt) || !mysqli_stmt_fetch($stmt) || mysqli_stmt_fetch($stmt))
131: printf("[013] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
132:
133: var_dump($obj->id);
134: var_dump($obj->label);
135:
136: print "reference, simple object w reference, change after bind...\n";
137: unset($id); unset($label); unset($obj);
138: $obj = new stdClass();
139: $obj->id = null;
140: $obj->label = null;
141: $id = &$obj->id;
142: $label = &$obj->label;
143:
144: if (true !== ($tmp = mysqli_stmt_bind_result($stmt, $id, $label)))
145: printf("[012] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
146:
147: $label = &$obj->id;
148: $id = null;
149:
150: if (!mysqli_stmt_execute($stmt) || !mysqli_stmt_fetch($stmt) || mysqli_stmt_fetch($stmt))
151: printf("[013] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
152:
153: var_dump($obj->id);
154: var_dump($id);
155: var_dump($obj->label);
156: var_dump($label);
157:
158: print "reference, one level, change after bind...\n";
159: unset($id); unset($label); unset($id_ref); unset($label_ref);
160: $id = null;
161: $id_ref = &$id;
162: $label = null;
163: $label_ref = &$label;
164:
165: if (true !== ($tmp = mysqli_stmt_bind_result($stmt, $id_ref, $label_ref)))
166: printf("[014] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
167:
168: $id_ref = 1;
169: $label_ref = 1;
170:
171: if (!mysqli_stmt_execute($stmt) || !mysqli_stmt_fetch($stmt) || mysqli_stmt_fetch($stmt))
172: printf("[015] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
173: var_dump($id_ref);
174: var_dump($id);
175: var_dump($label_ref);
176: var_dump($label);
177:
178: print "reference, circle...\n";
179: unset($id); unset($label_a); unset($label_b);
180: $id = null;
181: $label_a = &$label_b;
182: $label_b = &$label_a;
183:
184: if (true !== ($tmp = mysqli_stmt_bind_result($stmt, $id, $label_a)))
185: printf("[016] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
186: if (!mysqli_stmt_execute($stmt) || !mysqli_stmt_fetch($stmt) || mysqli_stmt_fetch($stmt))
187: printf("[017] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
188:
189: var_dump($id);
190: var_dump($label_a);
191: var_dump($label_b);
192:
193: print "reference, object, forward declaration...\n";
194: unset($bar); unset($id); unset($label_ref);
195: class foo {
196: public $foo;
197: public function foo() {
198: $this->foo = &$this->bar;
199: }
200: }
201: class bar extends foo {
202: public $bar = null;
203: }
204: $bar = new bar();
205: $id = null;
206: $label_ref = &$bar->bar;
207:
208: if (true !== ($tmp = mysqli_stmt_bind_result($stmt, $id, $label_ref)))
209: printf("[018] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
210: if (!mysqli_stmt_execute($stmt) || !mysqli_stmt_fetch($stmt) || mysqli_stmt_fetch($stmt))
211: printf("[019] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
212:
213: var_dump($id);
214: var_dump($bar);
215: var_dump($label_ref);
216:
217: print "references, object, private...\n";
218: unset($bar); unset($id); unset($label);
219: class mega_bar extends bar {
220: private $id;
221: public $id_ref;
222: public function mega_bar() {
223: $this->foo();
224: $this->id_ref = &$this->id;
225: }
226: }
227: $bar = new mega_bar();
228: $id = &$bar->id_ref;
229: $label = &$bar->foo;
230:
231: if (true !== ($tmp = mysqli_stmt_bind_result($stmt, $id, $label)))
232: printf("[020] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
233: if (!mysqli_stmt_execute($stmt) || !mysqli_stmt_fetch($stmt) || mysqli_stmt_fetch($stmt))
234: printf("[021] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
235: var_dump($id);
236: var_dump($label);
237: var_dump($bar);
238:
239: mysqli_stmt_close($stmt);
240: mysqli_close($link);
241:
242: print "done!";
243: ?>
244: --CLEAN--
245: <?php
246: require_once("clean_table.inc");
247: ?>
248: --EXPECTF--
249: plain vanilla...
250: int(1)
251: %unicode|string%(1) "a"
252: reference, one level...
253: int(1)
254: int(1)
255: %unicode|string%(1) "a"
256: %unicode|string%(1) "a"
257: reference, two levels...
258: int(1)
259: int(1)
260: int(1)
261: %unicode|string%(1) "a"
262: %unicode|string%(1) "a"
263: %unicode|string%(1) "a"
264: reference, $GLOBALS...
265: int(1)
266: int(1)
267: %unicode|string%(1) "a"
268: %unicode|string%(1) "a"
269: reference, same target...
270: %unicode|string%(1) "a"
271: %unicode|string%(1) "a"
272: reference, simple object...
273: int(1)
274: %unicode|string%(1) "a"
275: reference, simple object w reference...
276: int(1)
277: %unicode|string%(1) "a"
278: reference, simple object w reference, change after bind...
279: int(1)
280: int(1)
281: %unicode|string%(1) "a"
282: int(1)
283: reference, one level, change after bind...
284: int(1)
285: int(1)
286: %unicode|string%(1) "a"
287: %unicode|string%(1) "a"
288: reference, circle...
289: int(1)
290: %unicode|string%(1) "a"
291: %unicode|string%(1) "a"
292: reference, object, forward declaration...
293: int(1)
294: object(bar)#%d (2) {
295: [%u|b%"bar"]=>
296: &%unicode|string%(1) "a"
297: [%u|b%"foo"]=>
298: &%unicode|string%(1) "a"
299: }
300: %unicode|string%(1) "a"
301: references, object, private...
302: int(1)
303: %unicode|string%(1) "a"
304: object(mega_bar)#5 (4) {
305: [%s]=>
306: &int(1)
307: [%u|b%"id_ref"]=>
308: &int(1)
309: [%u|b%"bar"]=>
310: &%unicode|string%(1) "a"
311: [%u|b%"foo"]=>
312: &%unicode|string%(1) "a"
313: }
314: done!
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>