Annotation of embedaddon/php/ext/mysqli/tests/mysqli_stmt_bind_limits.phpt, revision 1.1
1.1 ! misho 1: --TEST--
! 2: Bind limits
! 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:
! 13: function bind_many($offset, $link, $num_params, $rows, $eval = true) {
! 14:
! 15: $drop = "DROP TABLE IF EXISTS test";
! 16: $create = "CREATE TABLE test(id INT AUTO_INCREMENT PRIMARY KEY, ";
! 17: $insert = "INSERT INTO test";
! 18: $columns = "";
! 19: $values = "";
! 20: $stmt_params = "";
! 21: $params = array();
! 22: for ($i = 0; $i < $num_params; $i++) {
! 23: $create .= "col" . $i . " INT, ";
! 24: $columns .= "col" . $i . ", ";
! 25: $values .= "?, ";
! 26: $stmt_params .= '$params[' . $i . '], ';
! 27: for ($j = 0; $j < $rows; $j++)
! 28: $params[($j * $rows) + $i] = $i;
! 29: }
! 30: $create = substr($create, 0, -2) . ")";
! 31:
! 32: $stmt_types = str_repeat("i", $num_params * $rows);
! 33: $stmt_params = substr(str_repeat($stmt_params, $rows), 0, -2);
! 34: $values = substr($values, 0, -2);
! 35: $insert .= "(" . substr($columns, 0, -2) . ") VALUES ";
! 36: $insert .= substr(str_repeat("(" . $values . "), ", $rows), 0, -2);
! 37:
! 38: $stmt_bind_param = 'return mysqli_stmt_bind_param($stmt, "' . $stmt_types . '", ' . $stmt_params . ');';
! 39:
! 40: printf("Testing %d columns with %d rows...\n", $num_params, $rows);
! 41:
! 42: if (!$link->query($drop) || !$link->query($create)) {
! 43: printf("[%03d + 01] [%d] %s\n", $offset, $link->errno, $link->error);
! 44: return false;
! 45: }
! 46: printf("... table created\n");
! 47:
! 48: if (!$stmt = $link->prepare($insert)) {
! 49: printf("[%03d + 02] [%d] %s\n", $offset, $link->errno, $link->error);
! 50: return false;
! 51: }
! 52: if ($stmt->param_count != $num_params * $rows) {
! 53: printf("[%03d + 03] Parameter count should be %d but got %d\n", $offset, $num_params * $rows, $stmt->param_count);
! 54: return false;
! 55: }
! 56: printf("... statement with %d parameters prepared\n", $stmt->param_count);
! 57:
! 58: if ($eval) {
! 59: if (!eval($stmt_bind_param)) {
! 60: printf("[%03d + 03] [%d] %s\n", $offset, $stmt->errno, $stmt->error);
! 61: return false;
! 62: }
! 63: } else {
! 64: $param_ref = array($stmt_types);
! 65: for ($i = 0; $i < $rows; $i++)
! 66: for ($j = 0; $j < $num_params; $j++)
! 67: $param_ref[] = &$params[($i * $rows) + $j];
! 68:
! 69: if (!call_user_func_array(array($stmt, 'bind_param'), $param_ref)) {
! 70: printf("[%03d + 03] [%d] %s\n", $offset, $stmt->errno, $stmt->error);
! 71: return false;
! 72: }
! 73: }
! 74: if ($stmt->param_count != $num_params * $rows) {
! 75: printf("[%03d + 03] Parameter count should be %d but got %d\n", $offset, $num_params * $rows, $stmt->param_count);
! 76: return false;
! 77: }
! 78:
! 79: if (!$stmt->execute()) {
! 80: printf("[%03d + 04] [%d] %s\n", $offset, $stmt->errno, $stmt->error);
! 81: return false;
! 82: }
! 83: printf("Statement done\n");
! 84:
! 85: $stmt->close();
! 86:
! 87: if (!($res = $link->query("SELECT * FROM test"))) {
! 88: printf("[%03d + 05] [%d] %s\n", $offset, $link->errno, $link->error);
! 89: return false;
! 90: }
! 91:
! 92: $row = $res->fetch_row();
! 93: $res->close();
! 94:
! 95: for ($i = 0; $i < $num_params; $i++) {
! 96: if ($row[$i + 1] != $i) {
! 97: printf("[%03d + 06] [%d] %s\n", $offset, $link->errno, $link->error);
! 98: }
! 99: }
! 100:
! 101: return true;
! 102: }
! 103:
! 104: if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) {
! 105: printf("[001] Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n",
! 106: $host, $user, $db, $port, $socket);
! 107: }
! 108:
! 109: var_dump(bind_many(10, $link, 273, 240, true));
! 110: var_dump(bind_many(20, $link, 273, 240, false));
! 111: mysqli_close($link);
! 112: print "done!";
! 113: ?>
! 114: --CLEAN--
! 115: <?php
! 116: require_once("clean_table.inc");
! 117: ?>
! 118: --EXPECTF--
! 119: Testing 273 columns with 240 rows...
! 120: ... table created
! 121: ... statement with 65520 parameters prepared
! 122: Statement done
! 123: bool(true)
! 124: Testing 273 columns with 240 rows...
! 125: ... table created
! 126: ... statement with 65520 parameters prepared
! 127: Statement done
! 128: bool(true)
! 129: done!
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>