123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- --TEST--
- Bind limits
- --SKIPIF--
- <?php
- require_once('skipif.inc');
- require_once('skipifemb.inc');
- require_once('skipifconnectfailure.inc');
- ?>
- --FILE--
- <?php
- require_once("connect.inc");
- function bind_many($offset, $link, $num_params, $rows, $eval = true) {
- $drop = "DROP TABLE IF EXISTS test";
- $create = "CREATE TABLE test(id INT AUTO_INCREMENT PRIMARY KEY, ";
- $insert = "INSERT INTO test";
- $columns = "";
- $values = "";
- $stmt_params = "";
- $params = array();
- for ($i = 0; $i < $num_params; $i++) {
- $create .= "col" . $i . " INT, ";
- $columns .= "col" . $i . ", ";
- $values .= "?, ";
- $stmt_params .= '$params[' . $i . '], ';
- for ($j = 0; $j < $rows; $j++)
- $params[($j * $rows) + $i] = $i;
- }
- $create = substr($create, 0, -2) . ")";
- $stmt_types = str_repeat("i", $num_params * $rows);
- $stmt_params = substr(str_repeat($stmt_params, $rows), 0, -2);
- $values = substr($values, 0, -2);
- $insert .= "(" . substr($columns, 0, -2) . ") VALUES ";
- $insert .= substr(str_repeat("(" . $values . "), ", $rows), 0, -2);
- $stmt_bind_param = 'return mysqli_stmt_bind_param($stmt, "' . $stmt_types . '", ' . $stmt_params . ');';
- printf("Testing %d columns with %d rows...\n", $num_params, $rows);
- if (!$link->query($drop) || !$link->query($create)) {
- printf("[%03d + 01] [%d] %s\n", $offset, $link->errno, $link->error);
- return false;
- }
- printf("... table created\n");
- if (!$stmt = $link->prepare($insert)) {
- printf("[%03d + 02] [%d] %s\n", $offset, $link->errno, $link->error);
- return false;
- }
- if ($stmt->param_count != $num_params * $rows) {
- printf("[%03d + 03] Parameter count should be %d but got %d\n", $offset, $num_params * $rows, $stmt->param_count);
- return false;
- }
- printf("... statement with %d parameters prepared\n", $stmt->param_count);
- if ($eval) {
- if (!eval($stmt_bind_param)) {
- printf("[%03d + 03] [%d] %s\n", $offset, $stmt->errno, $stmt->error);
- return false;
- }
- } else {
- $param_ref = array($stmt_types);
- for ($i = 0; $i < $rows; $i++)
- for ($j = 0; $j < $num_params; $j++)
- $param_ref[] = &$params[($i * $rows) + $j];
- if (!call_user_func_array(array($stmt, 'bind_param'), $param_ref)) {
- printf("[%03d + 03] [%d] %s\n", $offset, $stmt->errno, $stmt->error);
- return false;
- }
- }
- if ($stmt->param_count != $num_params * $rows) {
- printf("[%03d + 03] Parameter count should be %d but got %d\n", $offset, $num_params * $rows, $stmt->param_count);
- return false;
- }
- if (!$stmt->execute()) {
- printf("[%03d + 04] [%d] %s\n", $offset, $stmt->errno, $stmt->error);
- return false;
- }
- printf("Statement done\n");
- $stmt->close();
- if (!($res = $link->query("SELECT * FROM test"))) {
- printf("[%03d + 05] [%d] %s\n", $offset, $link->errno, $link->error);
- return false;
- }
- $row = $res->fetch_row();
- $res->close();
- for ($i = 0; $i < $num_params; $i++) {
- if ($row[$i + 1] != $i) {
- printf("[%03d + 06] [%d] %s\n", $offset, $link->errno, $link->error);
- }
- }
- return true;
- }
- if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) {
- printf("[001] Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n",
- $host, $user, $db, $port, $socket);
- }
- var_dump(bind_many(10, $link, 273, 240, true));
- var_dump(bind_many(20, $link, 273, 240, false));
- mysqli_close($link);
- print "done!";
- ?>
- --CLEAN--
- <?php
- require_once("clean_table.inc");
- ?>
- --EXPECTF--
- Testing 273 columns with 240 rows...
- ... table created
- ... statement with 65520 parameters prepared
- Statement done
- bool(true)
- Testing 273 columns with 240 rows...
- ... table created
- ... statement with 65520 parameters prepared
- Statement done
- bool(true)
- done!
|