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>