Annotation of embedaddon/php/ext/mysqli/tests/mysqli_stmt_bind_param_check_param_no_change.phpt, revision 1.1
1.1 ! misho 1: --TEST--
! 2: mysqli_stmt_bind_param() - checking whether the parameters are modified (bug#44390)
! 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: $link->set_charset('latin1');
! 13:
! 14: class foo {
! 15: // @var $bar string
! 16: public $bar;
! 17: }
! 18:
! 19: $foo = new foo;
! 20: $foo->bar = "фубар";
! 21:
! 22: echo "Test 1:\n";
! 23: $stmt = $link->prepare("SELECT ? FOO");
! 24: var_dump($foo); // here you can see the bar member var beeing a string
! 25: $stmt->bind_param("s", $foo->bar);
! 26: var_dump($foo); // this will show $foo->bar beeing a reference string
! 27: $stmt->bind_result($one);
! 28: $stmt->execute();
! 29: $stmt->fetch();
! 30: $stmt->free_result();
! 31: echo("$one\n\n");
! 32:
! 33: // it is getting worse. Binding the same var twice with different
! 34: // types you can get unexpected results (e.g. binary trash for the
! 35: // string and misc data for the integer. See next 2 tests.
! 36:
! 37: echo "Test 2:\n";
! 38: $stmt = $link->prepare("SELECT ? FOO, ? BAR");
! 39: var_dump($foo);
! 40: $stmt->bind_param("si", $foo->bar, $foo->bar);
! 41: echo "---\n";
! 42: var_dump($foo);
! 43: echo "---\n";
! 44: $stmt->execute();
! 45: var_dump($foo);
! 46: echo "---\n";
! 47: $stmt->bind_result($one, $two);
! 48: $stmt->fetch();
! 49: $stmt->free_result();
! 50: echo("$one - $two\n\n");
! 51:
! 52:
! 53: echo "Test 3:\n";
! 54: $stmt = $link->prepare("SELECT ? FOO, ? BAR");
! 55: var_dump($foo);
! 56: $stmt->bind_param("is", $foo->bar, $foo->bar);
! 57: var_dump($foo);
! 58: $stmt->bind_result($one, $two);
! 59: $stmt->execute();
! 60: $stmt->fetch();
! 61: $stmt->free_result();
! 62: echo("$one - $two\n\n");
! 63: echo "done!";
! 64: ?>
! 65: --CLEAN--
! 66: <?php
! 67: require_once("clean_table.inc");
! 68: ?>
! 69: --EXPECTF--
! 70: Test 1:
! 71: object(foo)#%d (1) {
! 72: [%u|b%"bar"]=>
! 73: %unicode|string%(%d) "фубар"
! 74: }
! 75: object(foo)#%d (1) {
! 76: [%u|b%"bar"]=>
! 77: &%unicode|string%(%d) "фубар"
! 78: }
! 79: фубар
! 80:
! 81: Test 2:
! 82: object(foo)#%d (1) {
! 83: [%u|b%"bar"]=>
! 84: %unicode|string%(%d) "фубар"
! 85: }
! 86: ---
! 87: object(foo)#%d (1) {
! 88: [%u|b%"bar"]=>
! 89: &%unicode|string%(%d) "фубар"
! 90: }
! 91: ---
! 92: object(foo)#%d (1) {
! 93: [%u|b%"bar"]=>
! 94: &%unicode|string%(%d) "фубар"
! 95: }
! 96: ---
! 97: фубар - 0
! 98:
! 99: Test 3:
! 100: object(foo)#%d (1) {
! 101: [%u|b%"bar"]=>
! 102: %unicode|string%(%d) "фубар"
! 103: }
! 104: object(foo)#%d (1) {
! 105: [%u|b%"bar"]=>
! 106: &%unicode|string%(%d) "фубар"
! 107: }
! 108: 0 - фубар
! 109:
! 110: done!
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>