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