Annotation of embedaddon/php/ext/mysqli/tests/mysqli_stmt_bind_param_type_juggling.phpt, revision 1.1

1.1     ! misho       1: --TEST--
        !             2: mysqli_stmt_bind_param() - binding variable twice
        !             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('table.inc');
        !            12: 
        !            13:        function bind_twice($link, $engine, $sql_type1, $sql_type2, $bind_type1, $bind_type2, $bind_value1, $bind_value2, $offset) {
        !            14: 
        !            15:                if (!mysqli_query($link, "DROP TABLE IF EXISTS test")) {
        !            16:                        printf("[%03d + 1] [%d] %s\n", $offset, mysqli_errno($link), mysqli_error($link));
        !            17:                        return false;
        !            18:                }
        !            19:                mysqli_autocommit($link, true);
        !            20: 
        !            21:                $sql = sprintf("CREATE TABLE test(col1 %s, col2 %s) ENGINE=%s", $sql_type1, $sql_type2, $engine);
        !            22:                if (!mysqli_query($link, $sql)) {
        !            23:                        printf("[%03d + 2] [%d] %s\n", $offset, mysqli_errno($link), mysqli_error($link));
        !            24:                        return false;
        !            25:                }
        !            26: 
        !            27:                if (!$stmt = mysqli_stmt_init($link)) {
        !            28:                        printf("[%03d + 3] [%d] %s\n", $offset, mysqli_errno($link), mysqli_error($link));
        !            29:                        return false;
        !            30:                }
        !            31: 
        !            32:                if (!mysqli_stmt_prepare($stmt, "INSERT INTO test(col1, col2) VALUES (?, ?)")) {
        !            33:                        printf("[%03d + 4] [%d] %s\n", $offset, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
        !            34:                        return false;
        !            35:                }
        !            36: 
        !            37:                if (!mysqli_stmt_bind_param($stmt, $bind_type1 . $bind_type2, $bind_value1, $bind_value1)) {
        !            38:                        printf("[%03d + 5] [%d] %s\n", $offset, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
        !            39:                        return false;
        !            40:                }
        !            41: 
        !            42:                if (!mysqli_stmt_execute($stmt)) {
        !            43:                        printf("[%03d + 6] [%d] %s\n", $offset, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
        !            44:                        return false;
        !            45:                }
        !            46: 
        !            47:                if (!mysqli_stmt_bind_param($stmt, $bind_type1 . $bind_type2, $bind_value1, $bind_value2)) {
        !            48:                        printf("[%03d + 7] [%d] %s\n", $offset, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
        !            49:                        return false;
        !            50:                }
        !            51:                if (!mysqli_stmt_execute($stmt)) {
        !            52:                        printf("[%03d + 8] [%d] %s\n", $offset, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
        !            53:                        return false;
        !            54:                }
        !            55: 
        !            56:                mysqli_stmt_close($stmt);
        !            57:                if (!$res = mysqli_query($link, "SELECT col1, col2 FROM test")) {
        !            58:                        printf("[%03d + 9] [%d] %s\n", $offset, mysqli_errno($link), mysqli_error($link));
        !            59:                        return false;
        !            60:                }
        !            61: 
        !            62:                if (2 !== ($tmp = mysqli_num_rows($res))) {
        !            63:                        printf("[%03d + 10] Expecting 2 rows, got %d rows [%d] %s\n", $offset, $tmp, mysqli_errno($link), mysqli_error($link));
        !            64:                }
        !            65: 
        !            66:                $row = mysqli_fetch_assoc($res);
        !            67:                if (($row['col1'] != $bind_value1) || ($row['col2'] != $bind_value1)) {
        !            68:                        printf("[%03d + 11] Expecting col1 = %s, col2 = %s got col1 = %s, col2 = %s - [%d] %s\n",
        !            69:                                $offset, $bind_value1, $bind_value1,
        !            70:                                $row['col1'], $row['col2'],
        !            71:                                mysqli_errno($link), mysqli_error($link));
        !            72:                        return false;
        !            73:                }
        !            74: 
        !            75:                $row = mysqli_fetch_assoc($res);
        !            76:                if (($row['col1'] != $bind_value1) || ($row['col2'] != $bind_value2)) {
        !            77:                        printf("[%03d + 12] Expecting col1 = %s, col2 = %s got col1 = %s, col2 = %s - [%d] %s\n",
        !            78:                                $offset, $bind_value1, $bind_value2,
        !            79:                                $row['col1'], $row['col2'],
        !            80:                                mysqli_errno($link), mysqli_error($link));
        !            81:                        return false;
        !            82:                }
        !            83:                mysqli_free_result($res);
        !            84:                return true;
        !            85:        }
        !            86: 
        !            87:        bind_twice($link, $engine, 'CHAR(1)', 'CHAR(1)', 's', 's', 'a', 'b', 10);
        !            88:        bind_twice($link, $engine, 'INT', 'INT', 'i', 'i', 1, 2, 20);
        !            89:        bind_twice($link, $engine, 'FLOAT', 'FLOAT', 'd', 'd', 1.01, 1.02, 30);
        !            90: 
        !            91:        /* type juggling - note that int->char works */
        !            92:        bind_twice($link, $engine, 'CHAR(1)', 'CHAR(1)', 's', 's', 1, 2, 40);
        !            93:        /* type juggling - note that string->integer works */
        !            94:        bind_twice($link, $engine, 'INT', 'INT', 'i', 'i', '1', '2', 50);
        !            95:        /* type juggling - note that string->float works*/
        !            96:        bind_twice($link, $engine, 'FLOAT', 'FLOAT', 'd', 'd', '1.01', '1.02', 60);
        !            97: 
        !            98:        /* now, let's have two columns of different type and do type juggling */
        !            99:        /*
        !           100:        what the test will do is:
        !           101:                1) col1 INT, col2 CHAR(1)
        !           102:     2) bind_param('is', 1, 1)
        !           103:     3) execute()
        !           104:                4) bind_param('is', 1, 'a')
        !           105:                5) execute()
        !           106: 
        !           107:                col1 INT, col2 INT
        !           108:     bind_param('ii', '1', '2') --> OK  (int column, string value)
        !           109:                bind_param('ii', 1, 2)                  --> OK  (int column, int value)
        !           110:     col1 CHAR(1), col2 CHAR(2)
        !           111:     bind_param('ss', 1, 2)             --> OK (string column, int value)
        !           112: 
        !           113:                So, what about:
        !           114:                col1 INT, COL2 CHAR(1)
        !           115:                bind_param('is', 1, 1)     ---> ??
        !           116:        */
        !           117:        bind_twice($link, $engine, 'INT', 'CHAR(1)', 'i', 's', 1, 'a', 70);
        !           118: 
        !           119:        mysqli_close($link);
        !           120:        print "done!";
        !           121: ?>
        !           122: --CLEAN--
        !           123: <?php
        !           124:        require_once("clean_table.inc");
        !           125: ?>
        !           126: --EXPECTF--
        !           127: done!

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>