Annotation of embedaddon/php/ext/mysqli/tests/mysqli_stmt_bind_result_references.phpt, revision 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>