1--TEST--
2mysqli_field_seek()
3--SKIPIF--
4<?php
5require_once('skipif.inc');
6require_once('skipifemb.inc');
7require_once('skipifconnectfailure.inc');
8?>
9--FILE--
10<?php
11	function mysqli_field_seek_flags($flags) {
12
13		$ret = '';
14
15		if ($flags & MYSQLI_NOT_NULL_FLAG)
16			$ret .= 'MYSQLI_NOT_NULL_FLAG ';
17
18		if ($flags & MYSQLI_PRI_KEY_FLAG)
19			$ret .= 'MYSQLI_PRI_KEY_FLAG ';
20
21		if ($flags & MYSQLI_UNIQUE_KEY_FLAG)
22			$ret .= 'MYSQLI_UNIQUE_KEY_FLAG ';
23
24		if ($flags & MYSQLI_MULTIPLE_KEY_FLAG)
25			$ret .= 'MYSQLI_MULTIPLE_KEY_FLAG ';
26
27		if ($flags & MYSQLI_BLOB_FLAG)
28			$ret .= 'MYSQLI_BLOB_FLAG ';
29
30		if ($flags & MYSQLI_UNSIGNED_FLAG)
31			$ret .= 'MYSQLI_UNSIGNED_FLAG ';
32
33		if ($flags & MYSQLI_ZEROFILL_FLAG)
34			$ret .= 'MYSQLI_ZEROFILL_FLAG ';
35
36		if ($flags & MYSQLI_AUTO_INCREMENT_FLAG)
37			$ret .= 'MYSQLI_AUTO_INCREMENT_FLAG ';
38
39		if ($flags & MYSQLI_TIMESTAMP_FLAG)
40			$ret .= 'MYSQLI_TIMESTAMP_FLAG ';
41
42		if ($flags & MYSQLI_SET_FLAG)
43			$ret .= 'MYSQLI_SET_FLAG ';
44
45		if ($flags & MYSQLI_NUM_FLAG)
46			$ret .= 'MYSQLI_NUM_FLAG ';
47
48		if ($flags & MYSQLI_PART_KEY_FLAG)
49			$ret .= 'MYSQLI_PART_KEY_FLAG ';
50
51		if ($flags & MYSQLI_GROUP_FLAG)
52			$ret .= 'MYSQLI_GROUP_FLAG ';
53
54		return $ret;
55	}
56
57	require_once("connect.inc");
58
59	$tmp    = NULL;
60	$link   = NULL;
61
62	if (!is_null($tmp = @mysqli_field_seek()))
63		printf("[001] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
64
65	if (!is_null($tmp = @mysqli_field_seek($link)))
66		printf("[002] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
67
68	require('table.inc');
69
70	// Make sure that client, connection and result charsets are all the
71	// same. Not sure whether this is strictly necessary.
72	if (!mysqli_set_charset($link, 'utf8'))
73		printf("[%d] %s\n", mysqli_errno($link), mysqli_errno($link));
74
75	$charsetInfo = mysqli_get_charset($link);
76
77	if (!$res = mysqli_query($link, "SELECT id, label FROM test ORDER BY id LIMIT 1", MYSQLI_USE_RESULT)) {
78		printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
79	}
80
81	var_dump(mysqli_field_seek($res, -1));
82	var_dump(mysqli_fetch_field($res));
83	var_dump(mysqli_field_seek($res, 0));
84	var_dump(mysqli_fetch_field($res));
85	var_dump(mysqli_field_seek($res, 1));
86
87	$field = mysqli_fetch_field($res);
88	var_dump($field);
89	/* label column, result set charset */
90	if ($field->charsetnr != $charsetInfo->number) {
91		printf("[004] Expecting charset %s/%d got %d\n",
92			$charsetInfo->charset, $charsetInfo->number, $field->charsetnr);
93	}
94	if ($field->length != $charsetInfo->max_length) {
95		printf("[005] Expecting length %d got %d\n",
96			$charsetInfo->max_length, $field->max_length);
97	}
98
99	var_dump(mysqli_field_tell($res));
100	var_dump(mysqli_field_seek($res, 2));
101	var_dump(mysqli_fetch_field($res));
102	var_dump(mysqli_field_seek($res, PHP_INT_MAX + 1));
103
104	if (!is_null($tmp = @mysqli_field_seek($res, 0, "too many")))
105		printf("[004] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
106
107	mysqli_free_result($res);
108
109	if (!$res = mysqli_query($link, "SELECT NULL as _null", MYSQLI_STORE_RESULT)) {
110		printf("[005] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
111	}
112	var_dump(mysqli_field_seek($res, 0));
113	var_dump(mysqli_fetch_field($res));
114
115	mysqli_free_result($res);
116
117	var_dump(mysqli_field_seek($res, 0));
118
119	mysqli_close($link);
120	print "done!";
121?>
122--CLEAN--
123<?php
124	require_once("clean_table.inc");
125?>
126--EXPECTF--
127Warning: mysqli_field_seek(): Invalid field offset in %s on line %d
128bool(false)
129object(stdClass)#%d (13) {
130  ["name"]=>
131  string(2) "id"
132  ["orgname"]=>
133  string(2) "id"
134  ["table"]=>
135  string(4) "test"
136  ["orgtable"]=>
137  string(4) "test"
138  ["def"]=>
139  string(0) ""
140  ["db"]=>
141  string(%d) "%s"
142  ["catalog"]=>
143  string(%d) "%s"
144  ["max_length"]=>
145  int(0)
146  ["length"]=>
147  int(11)
148  ["charsetnr"]=>
149  int(63)
150  ["flags"]=>
151  int(49155)
152  ["type"]=>
153  int(3)
154  ["decimals"]=>
155  int(0)
156}
157bool(true)
158object(stdClass)#%d (13) {
159  ["name"]=>
160  string(2) "id"
161  ["orgname"]=>
162  string(2) "id"
163  ["table"]=>
164  string(4) "test"
165  ["orgtable"]=>
166  string(4) "test"
167  ["def"]=>
168  string(0) ""
169  ["db"]=>
170  string(%d) "%s"
171  ["catalog"]=>
172  string(%d) "%s"
173  ["max_length"]=>
174  int(0)
175  ["length"]=>
176  int(11)
177  ["charsetnr"]=>
178  int(63)
179  ["flags"]=>
180  int(49155)
181  ["type"]=>
182  int(3)
183  ["decimals"]=>
184  int(0)
185}
186bool(true)
187object(stdClass)#%d (13) {
188  ["name"]=>
189  string(5) "label"
190  ["orgname"]=>
191  string(5) "label"
192  ["table"]=>
193  string(4) "test"
194  ["orgtable"]=>
195  string(4) "test"
196  ["def"]=>
197  string(0) ""
198  ["db"]=>
199  string(%d) "%s"
200  ["catalog"]=>
201  string(%d) "%s"
202  ["max_length"]=>
203  int(%d)
204  ["length"]=>
205  int(%d)
206  ["charsetnr"]=>
207  int(%d)
208  ["flags"]=>
209  int(0)
210  ["type"]=>
211  int(254)
212  ["decimals"]=>
213  int(0)
214}
215int(2)
216
217Warning: mysqli_field_seek(): Invalid field offset in %s on line %d
218bool(false)
219bool(false)
220
221Warning: mysqli_field_seek() expects parameter 2 to be int, float given in %s on line %d
222NULL
223bool(true)
224object(stdClass)#%d (13) {
225  ["name"]=>
226  string(5) "_null"
227  ["orgname"]=>
228  string(0) ""
229  ["table"]=>
230  string(0) ""
231  ["orgtable"]=>
232  string(0) ""
233  ["def"]=>
234  string(0) ""
235  ["db"]=>
236  string(0) ""
237  ["catalog"]=>
238  string(%d) "%s"
239  ["max_length"]=>
240  int(0)
241  ["length"]=>
242  int(0)
243  ["charsetnr"]=>
244  int(63)
245  ["flags"]=>
246  int(32896)
247  ["type"]=>
248  int(6)
249  ["decimals"]=>
250  int(0)
251}
252
253Warning: mysqli_field_seek(): Couldn't fetch mysqli_result in %s on line %d
254bool(false)
255done!
256