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>