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>