Annotation of embedaddon/php/ext/mysqli/tests/mysqli_class_mysqli_result_interface.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: Interface of the class mysqli_result
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('connect.inc');
12: require('table.inc');
13:
14: $mysqli = new my_mysqli($host, $user, $passwd, $db, $port, $socket);
15: $mysqli_result = $mysqli->query('SELECT * FROM test');
16: $row = $mysqli_result->fetch_row();
17:
18: $link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
19: $res = mysqli_query($link, 'SELECT * FROM test');
20: assert(mysqli_fetch_row($res) === $row);
21:
22: printf("Parent class:\n");
23: var_dump(get_parent_class($mysqli_result));
24:
25: printf("\nMethods:\n");
26: $methods = get_class_methods($mysqli_result);
27: $expected_methods = array(
28: '__construct' => true,
29: 'close' => true,
30: 'data_seek' => true,
31: 'fetch_array' => true,
32: 'fetch_assoc' => true,
33: 'fetch_field' => true,
34: 'fetch_field_direct' => true,
35: 'fetch_fields' => true,
36: 'fetch_object' => true,
37: 'fetch_row' => true,
38: 'field_seek' => true,
39: 'free' => true,
40: 'free_result' => true,
41: );
42: if ($IS_MYSQLND)
43: $expected_methods['fetch_all'] = true;
44:
45: foreach ($methods as $k => $method) {
46: if (isset($expected_methods[$method])) {
47: unset($expected_methods[$method]);
48: unset($methods[$k]);
49: }
50: if ($method == 'mysqli_result') {
51: // get_class_method reports different constructor names
52: unset($expected_methods['__construct']);
53: unset($methods[$k]);
54: }
55: }
56:
57: if (!empty($expected_methods)) {
58: printf("Dumping list of missing methods.\n");
59: var_dump($expected_methods);
60: }
61: if (!empty($methods)) {
62: printf("Dumping list of unexpected methods.\n");
63: var_dump($methods);
64: }
65: if (empty($expected_methods) && empty($methods))
66: printf("ok\n");
67:
68:
69: printf("\nClass variables:\n");
70: $variables = array_keys(get_class_vars(get_class($mysqli_result)));
71: sort($variables);
72: foreach ($variables as $k => $var)
73: printf("%s\n", $var);
74:
75: printf("\nObject variables:\n");
76: $variables = array_keys(get_object_vars($mysqli_result));
77: foreach ($variables as $k => $var)
78: printf("%s\n", $var);
79:
80: printf("\nMagic, magic properties:\n");
81:
82: assert(($tmp = mysqli_field_tell($res)) === $mysqli_result->current_field);
83: printf("mysqli_result->current_field = '%s'/%s ('%s'/%s)\n",
84: $mysqli_result->current_field, gettype($mysqli_result->current_field),
85: $tmp, gettype($tmp));
86:
87: assert(($tmp = mysqli_field_count($link)) === $mysqli_result->field_count);
88: printf("mysqli_result->field_count = '%s'/%s ('%s'/%s)\n",
89: $mysqli_result->field_count, gettype($mysqli_result->field_count),
90: $tmp, gettype($tmp));
91:
92: assert(($tmp = mysqli_fetch_lengths($res)) === $mysqli_result->lengths);
93: printf("mysqli_result->lengths -> '%s'/%s ('%s'/%s)\n",
94: ((is_array($mysqli_result->lengths)) ? implode(' ', $mysqli_result->lengths) : 'n/a'),
95: gettype($mysqli_result->lengths),
96: ((is_array($tmp)) ? implode(' ', $tmp) : 'n/a'),
97: gettype($tmp));
98:
99: assert(($tmp = mysqli_num_rows($res)) === $mysqli_result->num_rows);
100: printf("mysqli_result->num_rows = '%s'/%s ('%s'/%s)\n",
101: $mysqli_result->num_rows, gettype($mysqli_result->num_rows),
102: $tmp, gettype($tmp));
103:
104: assert(in_array($mysqli_result->type, array(MYSQLI_STORE_RESULT, MYSQLI_USE_RESULT)));
105: printf("mysqli_result->type = '%s'/%s\n",
106: ((MYSQLI_STORE_RESULT == $mysqli_result->type) ? 'store' : 'use'),
107: gettype($mysqli_result->type));
108:
109: printf("\nAccess to undefined properties:\n");
110: printf("mysqli_result->unknown = '%s'\n", @$mysqli_result->unknown);
111:
112: printf("\nConstructor:\n");
113: if (!is_object($res = new mysqli_result($link)))
114: printf("[001] Expecting object/mysqli_result got %s/%s\n", gettye($res), $res);
115:
116: if (null !== ($tmp = @$res->num_rows))
117: printf("[002] Expecting NULL got %s/%s\n", gettype($tmp), $tmp);
118:
119: if (!mysqli_query($link, "SELECT id FROM test ORDER BY id"))
120: printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
121:
122: if (!is_object($res = new mysqli_result($link)))
123: printf("[004] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
124:
125: if (!is_object($res = new mysqli_result($link, MYSQLI_STORE_RESULT)))
126: printf("[005] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
127:
128: if (!is_object($res = new mysqli_result($link, MYSQLI_USE_RESULT)))
129: printf("[006] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
130:
131: if (!is_object($res = new mysqli_result($link, 'invalid')))
132: printf("[007] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
133:
134: $valid = array(MYSQLI_STORE_RESULT, MYSQLI_USE_RESULT);
135: do {
136: $mode = mt_rand(-1000, 1000);
137: } while (in_array($mode, $valid));
138:
139: if ($TEST_EXPERIMENTAL) {
140: ob_start();
141: if (!is_object($res = new mysqli_result($link, $mode)))
142: printf("[008] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
143: $content = ob_get_contents();
144: ob_end_clean();
145: if (!stristr($content, 'Invalid value for resultmode'))
146: printf("[009] Expecting warning because of invalid resultmode\n");
147: }
148:
149: if (!is_object($res = new mysqli_result('foo')))
150: printf("[010] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
151:
152: if (!is_object($res = @new mysqli_result($link, MYSQLI_STORE_RESULT, 1)))
153: printf("[011] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
154:
155: print "done!";
156: ?>
157: --EXPECTF--
158: Parent class:
159: bool(false)
160:
161: Methods:
162: ok
163:
164: Class variables:
165: current_field
166: field_count
167: lengths
168: num_rows
169: type
170:
171: Object variables:
172: current_field
173: field_count
174: lengths
175: num_rows
176: type
177:
178: Magic, magic properties:
179: mysqli_result->current_field = '0'/integer ('0'/integer)
180: mysqli_result->field_count = '2'/integer ('2'/integer)
181: mysqli_result->lengths -> '1 1'/array ('1 1'/array)
182: mysqli_result->num_rows = '6'/integer ('6'/integer)
183: mysqli_result->type = 'store'/integer
184:
185: Access to undefined properties:
186: mysqli_result->unknown = ''
187:
188: Constructor:
189:
190: Warning: mysqli_result::__construct() expects parameter 2 to be long, %unicode_string_optional% given in %s on line %d
191:
192: Warning: mysqli_result::__construct() expects parameter 1 to be mysqli, %unicode_string_optional% given in %s on line %d
193: done!
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>