Annotation of embedaddon/php/ext/mysqli/tests/mysqli_ps_select_union.phpt, revision 1.1
1.1 ! misho 1: --TEST--
! 2: Prepared Statements and SELECT UNION
! 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_once("connect.inc");
! 12: require_once("table.inc");
! 13:
! 14: // Regular (non-prepared) queries
! 15: print "Using CAST('somestring' AS CHAR)...\n";
! 16: if (!($res = $link->query("SELECT CAST('one' AS CHAR) AS column1 UNION SELECT CAST('three' AS CHAR) UNION SELECT CAST('two' AS CHAR)")))
! 17: printf("[001] [%d] %s\n", $link->errno, $link->error);
! 18:
! 19: $data = array();
! 20: while ($row = $res->fetch_assoc()) {
! 21: $data[] = $row['column1'];
! 22: var_dump($row['column1']);
! 23: }
! 24: $res->free();
! 25:
! 26: // Prepared Statements
! 27: if (!($stmt = $link->prepare("SELECT CAST('one' AS CHAR) AS column1 UNION SELECT CAST('three' AS CHAR) UNION SELECT CAST('two' AS CHAR)")))
! 28: printf("[002] [%d] %s\n", $link->errno, $link->error);
! 29:
! 30: $column1 = null;
! 31: if (!$stmt->execute() || !$stmt->bind_result($column1))
! 32: printf("[003] [%d] %s\n", $stmt->errno, $stmt->error);
! 33:
! 34: $index = 0;
! 35: while ($stmt->fetch()) {
! 36: if ($data[$index] != $column1) {
! 37: printf("[004] Row %d, expecting %s/%s got %s/%s\n",
! 38: $index + 1, gettype($data[$index]), $data[$index], gettype($column1), $column1);
! 39: }
! 40: $index++;
! 41: }
! 42: $stmt->close();
! 43:
! 44: if ($IS_MYSQLND) {
! 45: /*
! 46: Advantage mysqlnd -
! 47: The metadata mysqlnd has availabe after prepare is better than
! 48: the one made availabe by the MySQL Client Library (libmysql).
! 49: "libmysql" will give wrong results and that is OK -
! 50: http://bugs.mysql.com/bug.php?id=47483
! 51: */
! 52: if (!($stmt = $link->prepare("SELECT CAST('one' AS CHAR) AS column1 UNION SELECT CAST('three' AS CHAR) UNION SELECT CAST('two' AS CHAR)")))
! 53: printf("[005] [%d] %s\n", $link->errno, $link->error);
! 54:
! 55: $column1 = null;
! 56: /* Note: bind_result before execute */
! 57: if (!$stmt->bind_result($column1) || !$stmt->execute())
! 58: printf("[006] [%d] %s\n", $stmt->errno, $stmt->error);
! 59:
! 60: $index = 0;
! 61: while ($stmt->fetch()) {
! 62: if ($data[$index] != $column1) {
! 63: printf("[007] Row %d, expecting %s/%s got %s/%s\n",
! 64: $index + 1, gettype($data[$index]), $data[$index], gettype($column1), $column1);
! 65: }
! 66: $index++;
! 67: }
! 68: $stmt->close();
! 69: }
! 70:
! 71: // Regular (non-prepared) queries
! 72: print "Mixing CAST('somestring'AS CHAR), integer and CAST(integer AS CHAR)...\n";
! 73: if (!($res = $link->query("SELECT 1 AS column1 UNION SELECT CAST('three' AS CHAR) UNION SELECT CAST(2 AS CHAR)")))
! 74: printf("[008] [%d] %s\n", $link->errno, $link->error);
! 75:
! 76: $data = array();
! 77: while ($row = $res->fetch_assoc()) {
! 78: $data[] = $row['column1'];
! 79: }
! 80: $res->free();
! 81:
! 82: // Prepared Statements
! 83: if (!($stmt = $link->prepare("SELECT 1 AS column1 UNION SELECT CAST('three' AS CHAR) UNION SELECT CAST(2 AS CHAR)")))
! 84: printf("[009] [%d] %s\n", $link->errno, $link->error);
! 85:
! 86: $column1 = null;
! 87: if (!$stmt->execute() || !$stmt->bind_result($column1))
! 88: printf("[010] [%d] %s\n", $stmt->errno, $stmt->error);
! 89:
! 90: $index = 0;
! 91: while ($stmt->fetch()) {
! 92: if ($data[$index] != $column1) {
! 93: printf("[011] Row %d, expecting %s/%s got %s/%s\n",
! 94: $index + 1, gettype($data[$index]), $data[$index], gettype($column1), $column1);
! 95: }
! 96: var_dump($column1);
! 97: $index++;
! 98: }
! 99: $stmt->close();
! 100:
! 101: if ($IS_MYSQLND) {
! 102: /* Advantage mysqlnd - see above... */
! 103: if (!($stmt = $link->prepare("SELECT 1 AS column1 UNION SELECT CAST('three' AS CHAR) UNION SELECT CAST(2 AS CHAR)")))
! 104: printf("[012] [%d] %s\n", $link->errno, $link->error);
! 105:
! 106: $column1 = null;
! 107: if (!$stmt->bind_result($column1) || !$stmt->execute())
! 108: printf("[013] [%d] %s\n", $stmt->errno, $stmt->error);
! 109:
! 110: $index = 0;
! 111: while ($stmt->fetch()) {
! 112: if ($data[$index] != $column1) {
! 113: printf("[014] Row %d, expecting %s/%s got %s/%s\n",
! 114: $index + 1, gettype($data[$index]), $data[$index], gettype($column1), $column1);
! 115: }
! 116: $index++;
! 117: }
! 118: $stmt->close();
! 119: }
! 120:
! 121: print "Using integer only...\n";
! 122: if (!($res = $link->query("SELECT 1 AS column1 UNION SELECT 303 UNION SELECT 2")))
! 123: printf("[015] [%d] %s\n", $link->errno, $link->error);
! 124:
! 125: $data = array();
! 126: while ($row = $res->fetch_assoc()) {
! 127: $data[] = $row['column1'];
! 128: }
! 129: $res->free();
! 130:
! 131: // Prepared Statements
! 132: if (!($stmt = $link->prepare("SELECT 1 AS column1 UNION SELECT 303 UNION SELECT 2")))
! 133: printf("[016] [%d] %s\n", $link->errno, $link->error);
! 134:
! 135: $column1 = null;
! 136: if (!$stmt->execute() || !$stmt->bind_result($column1))
! 137: printf("[017] [%d] %s\n", $stmt->errno, $stmt->error);
! 138:
! 139: $index = 0;
! 140: while ($stmt->fetch()) {
! 141: if ($data[$index] != $column1) {
! 142: printf("[018] Row %d, expecting %s/%s got %s/%s\n",
! 143: $index + 1, gettype($data[$index]), $data[$index], gettype($column1), $column1);
! 144: }
! 145: var_dump($column1);
! 146: $index++;
! 147: }
! 148: $stmt->close();
! 149:
! 150: if ($IS_MYSQLND) {
! 151: /* Advantage mysqlnd - see above */
! 152: if (!($stmt = $link->prepare("SELECT 1 AS column1 UNION SELECT 303 UNION SELECT 2")))
! 153: printf("[019] [%d] %s\n", $link->errno, $link->error);
! 154:
! 155: $column1 = null;
! 156: if (!$stmt->bind_result($column1) || !$stmt->execute())
! 157: printf("[020] [%d] %s\n", $stmt->errno, $stmt->error);
! 158:
! 159: $index = 0;
! 160: while ($stmt->fetch()) {
! 161: if ($data[$index] != $column1) {
! 162: printf("[021] Row %d, expecting %s/%s got %s/%s\n",
! 163: $index + 1, gettype($data[$index]), $data[$index], gettype($column1), $column1);
! 164: }
! 165: $index++;
! 166: }
! 167: $stmt->close();
! 168: }
! 169:
! 170: print "Testing bind_param(), strings only...\n";
! 171: $two = 'two';
! 172: $three = 'three';
! 173: if (!($stmt = $link->prepare("SELECT 'one' AS column1 UNION SELECT ? UNION SELECT ?")))
! 174: printf("[022] [%d] %s\n", $stmt->errno, $stmt->error);
! 175:
! 176: $column1 = null;
! 177: if (!$stmt->bind_param('ss', $three, $two) || !$stmt->execute() || !$stmt->bind_result($column1))
! 178: printf("[023] [%d] %s\n", $stmt->errno, $stmt->error);
! 179:
! 180: $index = 0;
! 181: $data = array();
! 182: while ($stmt->fetch()) {
! 183: $data[$index++] = $column1;
! 184: var_dump($column1);
! 185: }
! 186: $stmt->close();
! 187:
! 188: if ($IS_MYSQLND) {
! 189: /* Advantage mysqlnd - see above */
! 190: $two = 'two';
! 191: $three = 'three';
! 192: if (!($stmt = $link->prepare("SELECT 'one' AS column1 UNION SELECT ? UNION SELECT ?")))
! 193: printf("[024] [%d] %s\n", $stmt->errno, $stmt->error);
! 194:
! 195: $column1 = null;
! 196: if (!$stmt->bind_param('ss', $three, $two) || !$stmt->bind_result($column1) || !$stmt->execute())
! 197: printf("[025] [%d] %s\n", $stmt->errno, $stmt->error);
! 198:
! 199: $index = 0;
! 200: while ($stmt->fetch()) {
! 201: if ($data[$index] != $column1) {
! 202: printf("[26] Row %d, expecting %s/%s, got %s/%s\n",
! 203: $index + 1, gettype($data[$index]), $data[$index], gettype($column1), $column1);
! 204: }
! 205: $index++;
! 206: }
! 207: $stmt->close();
! 208: }
! 209:
! 210: print "Testing bind_param(), strings only, with CAST AS CHAR...\n";
! 211: $two = 'two';
! 212: $three = 'three beers are more than enough';
! 213: if (!($stmt = $link->prepare("SELECT CAST('one' AS CHAR) AS column1 UNION SELECT CAST(? AS CHAR) UNION SELECT CAST(? AS CHAR)")))
! 214: printf("[027] [%d] %s\n", $stmt->errno, $stmt->error);
! 215:
! 216: $column1 = null;
! 217: if (!$stmt->bind_param('ss', $three, $two) || !$stmt->execute() || !$stmt->bind_result($column1))
! 218: printf("[028] [%d] %s\n", $stmt->errno, $stmt->error);
! 219:
! 220: $index = 0;
! 221: $data = array();
! 222: while ($stmt->fetch()) {
! 223: $data[$index++] = $column1;
! 224: var_dump($column1);
! 225: }
! 226: $stmt->close();
! 227:
! 228: if ($IS_MYSQLND) {
! 229: /* Advantage mysqlnd - see above */
! 230: $two = 'two';
! 231: $three = 'three beers are more than enough';
! 232: if (!($stmt = $link->prepare("SELECT CAST('one' AS CHAR) AS column1 UNION SELECT CAST(? AS CHAR) UNION SELECT CAST(? AS CHAR)")))
! 233: printf("[029] [%d] %s\n", $stmt->errno, $stmt->error);
! 234:
! 235: $column1 = null;
! 236: if (!$stmt->bind_param('ss', $three, $two) || !$stmt->bind_result($column1) || !$stmt->execute())
! 237: printf("[030] [%d] %s\n", $stmt->errno, $stmt->error);
! 238:
! 239: $index = 0;
! 240: while ($stmt->fetch()) {
! 241: if ($data[$index] != $column1) {
! 242: printf("[31] Row %d, expecting %s/%s, got %s/%s\n",
! 243: $index + 1, gettype($data[$index]), $data[$index], gettype($column1), $column1);
! 244: }
! 245: $index++;
! 246: }
! 247: $stmt->close();
! 248: }
! 249:
! 250: $link->close();
! 251:
! 252: print "done!";
! 253: ?>
! 254: --EXPECTF--
! 255: Using CAST('somestring' AS CHAR)...
! 256: %unicode|string%(3) "one"
! 257: %unicode|string%(5) "three"
! 258: %unicode|string%(3) "two"
! 259: Mixing CAST('somestring'AS CHAR), integer and CAST(integer AS CHAR)...
! 260: %unicode|string%(1) "1"
! 261: %unicode|string%(5) "three"
! 262: %unicode|string%(1) "2"
! 263: Using integer only...
! 264: int(1)
! 265: int(303)
! 266: int(2)
! 267: Testing bind_param(), strings only...
! 268: %unicode|string%(3) "one"
! 269: %unicode|string%(5) "three"
! 270: %unicode|string%(3) "two"
! 271: Testing bind_param(), strings only, with CAST AS CHAR...
! 272: %unicode|string%(3) "one"
! 273: %unicode|string%(32) "three beers are more than enough"
! 274: %unicode|string%(3) "two"
! 275: done!
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>