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>