Annotation of embedaddon/php/ext/mysqli/tests/mysqli_stmt_bind_param_references.phpt, revision 1.1

1.1     ! misho       1: --TEST--
        !             2: mysqli_stmt_bind_param() - 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:        function findRow($offset, $link, $id, $label) {
        !            14: 
        !            15:                $sql = sprintf("SELECT id, label FROM test WHERE id = '%d' AND label = '%s'",
        !            16:                                $id, $label);
        !            17:                if (!$res = mysqli_query($link, $sql)) {
        !            18:                        printf("[%03d + 1] %s failed, [%d] %s\n",
        !            19:                                $offset, $sql, mysqli_errno($link), mysqli_error($link));
        !            20:                        return false;
        !            21:                }
        !            22:                if (!$row = mysqli_fetch_assoc($res)) {
        !            23:                        printf("[%03d + 2] fetch for %s failed, [%d] %s\n",
        !            24:                                $offset, $sql, mysqli_errno($link), mysqli_error($link));
        !            25:                        return false;
        !            26:                }
        !            27: 
        !            28:                mysqli_free_result($res);
        !            29:                if ($row['id'] != $id) {
        !            30:                        printf("[%03d + 3] Expecting %s/%s got %s/%s\n",
        !            31:                                $offset, gettype($id), $id,
        !            32:                                gettype($row['id']), $row['id']
        !            33:                                );
        !            34:                        return false;
        !            35:                }
        !            36: 
        !            37:                if ($row['label'] != $label) {
        !            38:                        printf("[%03d + 4] Expecting %s/%s got %s/%s\n",
        !            39:                                $offset, gettype($label), $label,
        !            40:                                gettype($row['label']), $row['label']
        !            41:                                );
        !            42:                        return false;
        !            43:                }
        !            44: 
        !            45:                $sql = sprintf("DELETE FROM test WHERE id = '%d' AND label = '%s'",
        !            46:                                $id, $label);
        !            47:                if (!mysqli_query($link, $sql)) {
        !            48:                        printf("[%03d + 5] %s failed, [%d] %s\n",
        !            49:                                $offset, $sql, mysqli_errno($link), mysqli_error($link));
        !            50:                        return false;
        !            51:                }
        !            52: 
        !            53:                return true;
        !            54:        }
        !            55:        // or we will get dups around [28]
        !            56:        mysqli_query($link, "ALTER TABLE test DROP PRIMARY KEY");
        !            57: 
        !            58:        $stmt = mysqli_stmt_init($link);
        !            59:        if (!mysqli_stmt_prepare($stmt, "INSERT INTO test(id, label) VALUES (?, ?)"))
        !            60:                printf("[001] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
        !            61: 
        !            62:        $id = 100;
        !            63:        $label = 'v';
        !            64:        if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id, $label)))
        !            65:                printf("[002] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
        !            66: 
        !            67:        if (true !== mysqli_stmt_execute($stmt))
        !            68:                printf("[003] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
        !            69:        // no need to check the return value, will bail and make EXPECTF fail if need be
        !            70:        findRow(4, $link, $id, $label);
        !            71: 
        !            72:        $id++;
        !            73:        $label_ref = &$label;
        !            74:        $label = 'w';
        !            75:        if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id, $label_ref)))
        !            76:                printf("[005] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
        !            77: 
        !            78:        if (true !== mysqli_stmt_execute($stmt))
        !            79:                printf("[006] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
        !            80:        findRow(7, $link, $id, $label_ref);
        !            81: 
        !            82:        $id++;
        !            83:        $label_ref_ref = &$label_ref;
        !            84:        $label = 'x';
        !            85: 
        !            86:        if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id, $label_ref_ref)))
        !            87:                printf("[007] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
        !            88: 
        !            89:        if (true !== mysqli_stmt_execute($stmt))
        !            90:                printf("[008] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
        !            91:        findRow(9, $link, $id, $label_ref_ref);
        !            92: 
        !            93:        $id = 9;
        !            94:        $label = $id;
        !            95:        $label_num = &$label;
        !            96: 
        !            97:        if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id, $label_num)))
        !            98:                printf("[010] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
        !            99: 
        !           100:        if (true !== mysqli_stmt_execute($stmt))
        !           101:                printf("[011] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
        !           102:        findRow(12, $link, $id, $label_num);
        !           103: 
        !           104:        $label_num = &$id;
        !           105:        if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id, $label_num)))
        !           106:                printf("[013] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
        !           107: 
        !           108:        if (true !== mysqli_stmt_execute($stmt))
        !           109:                printf("[014] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
        !           110:        findRow(15, $link, $id, $label_num);
        !           111: 
        !           112:        $label = 9;
        !           113:        $id = &$label;
        !           114: 
        !           115:        if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id, $label)))
        !           116:                printf("[015] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
        !           117: 
        !           118:        if (true !== mysqli_stmt_execute($stmt))
        !           119:                printf("[016] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
        !           120:        findRow(17, $link, $id, $label);
        !           121: 
        !           122:        $base = 9;
        !           123:        $id = &$base;
        !           124:        $label = &$id;
        !           125: 
        !           126:        if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id, $label)))
        !           127:                printf("[018] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
        !           128: 
        !           129:        if (true !== mysqli_stmt_execute($stmt))
        !           130:                printf("[019] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
        !           131:        findRow(20, $link, $id, $label);
        !           132: 
        !           133:        $id_ref = &$id;
        !           134:        $label_ref = &$label;
        !           135: 
        !           136:        if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id_ref, $label_ref)))
        !           137:                printf("[021] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
        !           138: 
        !           139:        if (true !== mysqli_stmt_execute($stmt))
        !           140:                printf("[022] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
        !           141:        findRow(23, $link, $id_ref, $label_ref);
        !           142: 
        !           143:        $id_ref_ref = &$GLOBALS['id_ref'];
        !           144:        $label_ref_ref = &$GLOBALS['label_ref_ref'];
        !           145: 
        !           146:        if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id_ref_ref, $label_ref_ref)))
        !           147:                printf("[024] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
        !           148: 
        !           149:        if (true !== mysqli_stmt_execute($stmt))
        !           150:                printf("[025] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
        !           151:        findRow(26, $link, $id_ref_ref, $label_ref_ref);
        !           152: 
        !           153:        unset($id);
        !           154:        unset($label);
        !           155:        $id = 102;
        !           156:        $label = new stdClass();
        !           157:        $label->label = 'y';
        !           158:        $id_ref = &$GLOBALS['id'];
        !           159:        $label_ref = &$label->label;
        !           160:        if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id_ref, $label_ref)))
        !           161:                printf("[027] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
        !           162:        if (true !== @mysqli_stmt_execute($stmt))
        !           163:                printf("[028] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
        !           164:        findRow(29, $link, $id_ref, $label_ref);
        !           165: 
        !           166:        $id = 103;
        !           167:        $label_a = &$label_b;
        !           168:        $label_b = &$label_a;
        !           169:        $label_a = 'z';
        !           170: 
        !           171:        if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id, $label_b)))
        !           172:                printf("[030] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
        !           173: 
        !           174:        if (true !== mysqli_stmt_execute($stmt))
        !           175:                printf("[031] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
        !           176:        findRow(32, $link, $id, $label_b);
        !           177: 
        !           178:        class foo {
        !           179:                public $foo;
        !           180:                function foo() {
        !           181:                        $this->foo = &$this->bar;
        !           182:                }
        !           183:        }
        !           184:        class bar extends foo {
        !           185:                public $bar = 'v';
        !           186:        }
        !           187:        $bar = new bar();
        !           188:        $id++;
        !           189:        $label = &$GLOBALS['bar']->foo;
        !           190: 
        !           191:        if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id, $label)))
        !           192:                printf("[033] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
        !           193: 
        !           194:        if (true !== mysqli_stmt_execute($stmt))
        !           195:                printf("[034] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
        !           196:        findRow(35, $link, $id, $label);
        !           197: 
        !           198:        mysqli_stmt_close($stmt);
        !           199:        mysqli_close($link);
        !           200:        print "done!";
        !           201: ?>
        !           202: --CLEAN--
        !           203: <?php
        !           204:        require_once("clean_table.inc");
        !           205: ?>
        !           206: --EXPECTF--
        !           207: done!

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>