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