Annotation of embedaddon/php/ext/mysqli/tests/mysqli_stmt_bind_param_call_user_func.phpt, revision 1.1
1.1 ! misho 1: --TEST--
! 2: mysqli_stmt_bind_param used with call_user_func_array() (see also bug #43568)
! 3: --SKIPIF--
! 4: <?php
! 5: require_once('skipif.inc');
! 6: require_once('skipifemb.inc');
! 7: require_once('skipifconnectfailure.inc');
! 8:
! 9: // TODO remove once a decision has been made on call_user_func_array()
! 10: if (version_compare(PHP_VERSION, '5.3.0-dev') == -1)
! 11: die("skip needs PHP 5.3.0-dev+, see http://bugs.php.net/bug.php?id=43568");
! 12: ?>
! 13: --FILE--
! 14: <?php
! 15: require('connect.inc');
! 16: require('table.inc');
! 17:
! 18: if (!$stmt = mysqli_stmt_init($link))
! 19: printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
! 20:
! 21: if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test WHERE id = ?'))
! 22: printf("[002] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 23:
! 24: $id = 1;
! 25: if (!mysqli_stmt_bind_param($stmt, 'i', $id) ||
! 26: !mysqli_stmt_execute($stmt))
! 27: printf("[003] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 28:
! 29: $id = $label = null;
! 30: if (!mysqli_stmt_bind_result($stmt, $id, $label) ||
! 31: (true !== mysqli_stmt_fetch($stmt)))
! 32: printf("[004] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 33:
! 34: print "Regular, procedural, using variables\n";
! 35: var_dump($id);
! 36: var_dump($label);
! 37:
! 38: mysqli_stmt_close($stmt);
! 39: if (!$stmt = mysqli_stmt_init($link))
! 40: printf("[005] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
! 41:
! 42: if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test WHERE id = ?'))
! 43: printf("[006] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 44:
! 45: $types = 'i';
! 46: $id = 1;
! 47: $params = array(
! 48: 0 => &$stmt,
! 49: 1 => &$types,
! 50: 2 => &$id
! 51: );
! 52: if (!call_user_func_array('mysqli_stmt_bind_param', $params))
! 53: printf("[007] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 54:
! 55: if (!mysqli_stmt_execute($stmt))
! 56: printf("[008] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 57:
! 58: $id = $label = null;
! 59: if (!mysqli_stmt_bind_result($stmt, $id, $label) ||
! 60: (true !== mysqli_stmt_fetch($stmt)))
! 61: printf("[009] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 62:
! 63: print "Call user func, procedural, using references for everything\n";
! 64: var_dump($id);
! 65: var_dump($label);
! 66:
! 67: mysqli_stmt_close($stmt);
! 68: if (!$stmt = mysqli_stmt_init($link))
! 69: printf("[010] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
! 70:
! 71: if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test WHERE id = ?'))
! 72: printf("[011] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 73:
! 74: $types = 'i';
! 75: $id = 1;
! 76: $params = array(
! 77: 0 => &$types,
! 78: 1 => &$id
! 79: );
! 80: if (!call_user_func_array(array($stmt, 'bind_param'), $params))
! 81: printf("[012] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 82:
! 83: if (!mysqli_stmt_execute($stmt))
! 84: printf("[013] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 85:
! 86: $id = $label = null;
! 87: if (!mysqli_stmt_bind_result($stmt, $id, $label) ||
! 88: (true !== mysqli_stmt_fetch($stmt)))
! 89: printf("[014] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 90:
! 91: print "Call user func, object oriented, using references for everything\n";
! 92: var_dump($id);
! 93: var_dump($label);
! 94:
! 95: mysqli_stmt_close($stmt);
! 96: if (!$stmt = mysqli_stmt_init($link))
! 97: printf("[015] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
! 98:
! 99: if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test WHERE id = ?'))
! 100: printf("[016] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 101:
! 102: $types = 'i';
! 103: $id = 1;
! 104: $params = array(
! 105: 0 => $types,
! 106: 1 => &$id
! 107: );
! 108: if (!call_user_func_array(array($stmt, 'bind_param'), $params))
! 109: printf("[017] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 110:
! 111: if (!mysqli_stmt_execute($stmt))
! 112: printf("[018] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 113:
! 114: $id = $label = null;
! 115: if (!mysqli_stmt_bind_result($stmt, $id, $label) ||
! 116: (true !== mysqli_stmt_fetch($stmt)))
! 117: printf("[019] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 118:
! 119: print "Call user func, object oriented, using variable for types. using references for bound parameter\n";
! 120: var_dump($id);
! 121: var_dump($label);
! 122:
! 123: mysqli_stmt_close($stmt);
! 124: if (!$stmt = mysqli_stmt_init($link))
! 125: printf("[020] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
! 126:
! 127: if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test WHERE id = ?'))
! 128: printf("[021] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 129:
! 130: $id = 1;
! 131: $params = array(
! 132: 0 => 'i',
! 133: 1 => &$id
! 134: );
! 135: if (!call_user_func_array(array($stmt, 'bind_param'), $params))
! 136: printf("[022] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 137:
! 138: if (!mysqli_stmt_execute($stmt))
! 139: printf("[023] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 140:
! 141: $id = $label = null;
! 142: if (!mysqli_stmt_bind_result($stmt, $id, $label) ||
! 143: (true !== mysqli_stmt_fetch($stmt)))
! 144: printf("[024] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 145:
! 146: print "Call user func, object oriented, using constant for types. using references for bound parameter\n";
! 147: var_dump($id);
! 148: var_dump($label);
! 149:
! 150: mysqli_stmt_close($stmt);
! 151: if (!$stmt = mysqli_stmt_init($link))
! 152: printf("[025] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
! 153:
! 154: if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test WHERE id = ?'))
! 155: printf("[026] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 156:
! 157: $types = 'i';
! 158: $id = 1;
! 159: $params = array(
! 160: 0 => &$stmt,
! 161: 1 => $types,
! 162: 2 => &$id
! 163: );
! 164: if (!call_user_func_array('mysqli_stmt_bind_param', $params))
! 165: printf("[027] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 166:
! 167: if (!mysqli_stmt_execute($stmt))
! 168: printf("[028] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 169:
! 170: $id = $label = null;
! 171: if (!mysqli_stmt_bind_result($stmt, $id, $label) ||
! 172: (true !== mysqli_stmt_fetch($stmt)))
! 173: printf("[029] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 174:
! 175: print "Call user func, procedural, using references for everything but using variable for types\n";
! 176: var_dump($id);
! 177: var_dump($label);
! 178:
! 179: mysqli_stmt_close($stmt);
! 180: if (!$stmt = mysqli_stmt_init($link))
! 181: printf("[025] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
! 182:
! 183: if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test WHERE id = ?'))
! 184: printf("[026] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 185:
! 186: $types = 'i';
! 187: $id = 1;
! 188: $params = array(
! 189: 0 => $stmt,
! 190: 1 => $types,
! 191: 2 => &$id
! 192: );
! 193: if (!call_user_func_array('mysqli_stmt_bind_param', $params))
! 194: printf("[027] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 195:
! 196: if (!mysqli_stmt_execute($stmt))
! 197: printf("[028] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 198:
! 199: $id = $label = null;
! 200: if (!mysqli_stmt_bind_result($stmt, $id, $label) ||
! 201: (true !== mysqli_stmt_fetch($stmt)))
! 202: printf("[029] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 203:
! 204: print "Call user func, procedural, using references for bound parameter, using variables for resource and types\n";
! 205: var_dump($id);
! 206: var_dump($label);
! 207:
! 208: mysqli_stmt_close($stmt);
! 209: if (!$stmt = mysqli_stmt_init($link))
! 210: printf("[030] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
! 211:
! 212: if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test WHERE id = ?'))
! 213: printf("[031] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 214:
! 215: $types = 'i';
! 216: $id = 1;
! 217: $params = array(
! 218: 0 => $stmt,
! 219: 1 => $types,
! 220: 2 => &$id
! 221: );
! 222: if (!call_user_func_array('mysqli_stmt_bind_param', $params))
! 223: printf("[032] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 224:
! 225: if (!mysqli_stmt_execute($stmt))
! 226: printf("[033] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 227:
! 228: $id = $label = null;
! 229: if (!mysqli_stmt_bind_result($stmt, $id, $label) ||
! 230: (true !== mysqli_stmt_fetch($stmt)))
! 231: printf("[034] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 232:
! 233: print "Call user func, procedural, using references for bound parameter, using variables for resource and types\n";
! 234: var_dump($id);
! 235: var_dump($label);
! 236:
! 237: mysqli_stmt_close($stmt);
! 238: if (!$stmt = mysqli_stmt_init($link))
! 239: printf("[035] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
! 240:
! 241: if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test WHERE id = ?'))
! 242: printf("[036] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 243:
! 244: $id = 1;
! 245: $params = array(
! 246: 0 => $stmt,
! 247: 1 => 'i',
! 248: 2 => &$id
! 249: );
! 250: if (!call_user_func_array('mysqli_stmt_bind_param', $params))
! 251: printf("[037] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 252:
! 253: if (!mysqli_stmt_execute($stmt))
! 254: printf("[038] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 255:
! 256: $id = $label = null;
! 257: if (!mysqli_stmt_bind_result($stmt, $id, $label) ||
! 258: (true !== mysqli_stmt_fetch($stmt)))
! 259: printf("[039] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 260:
! 261: print "Call user func, procedural, using references for bound parameter, using variable for resource, using constant for types\n";
! 262: var_dump($id);
! 263: var_dump($label);
! 264:
! 265: mysqli_stmt_close($stmt);
! 266: if (!$stmt = mysqli_stmt_init($link))
! 267: printf("[040] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
! 268:
! 269: if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test WHERE id = ?'))
! 270: printf("[041] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 271:
! 272: $id = 1;
! 273: if (!call_user_func_array('mysqli_stmt_bind_param', array($stmt, 'i', &$id)))
! 274: printf("[042] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 275:
! 276: if (!mysqli_stmt_execute($stmt))
! 277: printf("[043] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 278:
! 279: $id = $label = null;
! 280: if (!mysqli_stmt_bind_result($stmt, $id, $label) ||
! 281: (true !== mysqli_stmt_fetch($stmt)))
! 282: printf("[044] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 283:
! 284: print "Call user func, procedural, using references for bound parameter, using variable for resource, using constant for types, array\n";
! 285: var_dump($id);
! 286: var_dump($label);
! 287:
! 288: //
! 289: // Any of those shall fail - see also bugs.php.net/43568
! 290: //
! 291: mysqli_stmt_close($stmt);
! 292: if (!$stmt = mysqli_stmt_init($link))
! 293: printf("[045] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
! 294:
! 295: if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test WHERE id = ?'))
! 296: printf("[046] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 297:
! 298: $id = 1;
! 299: $params = array(
! 300: 0 => 'i',
! 301: 1 => &$id
! 302: );
! 303: if (!call_user_func_array(array($stmt, 'bind_param'), $params))
! 304: printf("[047] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 305:
! 306: if (!mysqli_stmt_execute($stmt))
! 307: printf("[048] [%d] (Message might vary with MySQL Server version, e.g. No data supplied for parameters in prepared statement)\n", mysqli_stmt_errno($stmt));
! 308:
! 309: mysqli_stmt_close($stmt);
! 310: if (!$stmt = mysqli_stmt_init($link))
! 311: printf("[049] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
! 312:
! 313: if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test WHERE id = ?'))
! 314: printf("[050] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 315:
! 316: $types = 'i';
! 317: $id = 1;
! 318: $params = array(
! 319: 0 => $stmt,
! 320: 1 => 'i',
! 321: 2 => &$id
! 322: );
! 323: if (!call_user_func_array('mysqli_stmt_bind_param', $params))
! 324: printf("[051] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
! 325:
! 326: if (!mysqli_stmt_execute($stmt))
! 327: printf("[052] [%d] (Message might vary with MySQL Server version, e.g. No data supplied for parameters in prepared statement)\n", mysqli_stmt_errno($stmt));
! 328:
! 329: print "done!";
! 330: ?>
! 331: --CLEAN--
! 332: <?php
! 333: require_once("clean_table.inc");
! 334: ?>
! 335: --EXPECTF--
! 336: Regular, procedural, using variables
! 337: int(1)
! 338: %unicode|string%(1) "a"
! 339: Call user func, procedural, using references for everything
! 340: int(1)
! 341: %unicode|string%(1) "a"
! 342: Call user func, object oriented, using references for everything
! 343: int(1)
! 344: %unicode|string%(1) "a"
! 345: Call user func, object oriented, using variable for types. using references for bound parameter
! 346: int(1)
! 347: %unicode|string%(1) "a"
! 348: Call user func, object oriented, using constant for types. using references for bound parameter
! 349: int(1)
! 350: %unicode|string%(1) "a"
! 351: Call user func, procedural, using references for everything but using variable for types
! 352: int(1)
! 353: %unicode|string%(1) "a"
! 354: Call user func, procedural, using references for bound parameter, using variables for resource and types
! 355: int(1)
! 356: %unicode|string%(1) "a"
! 357: Call user func, procedural, using references for bound parameter, using variables for resource and types
! 358: int(1)
! 359: %unicode|string%(1) "a"
! 360: Call user func, procedural, using references for bound parameter, using variable for resource, using constant for types
! 361: int(1)
! 362: %unicode|string%(1) "a"
! 363: Call user func, procedural, using references for bound parameter, using variable for resource, using constant for types, array
! 364: int(1)
! 365: %unicode|string%(1) "a"
! 366: done!
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>