Annotation of embedaddon/php/ext/mysqli/tests/mysqli_stmt_bind_param_check_param_no_change.phpt, revision 1.1.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>