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 [%u|b%"name"]=> 131 %unicode|string%(2) "id" 132 [%u|b%"orgname"]=> 133 %unicode|string%(2) "id" 134 [%u|b%"table"]=> 135 %unicode|string%(4) "test" 136 [%u|b%"orgtable"]=> 137 %unicode|string%(4) "test" 138 [%u|b%"def"]=> 139 %unicode|string%(0) "" 140 [%u|b%"db"]=> 141 %unicode|string%(%d) "%s" 142 [%u|b%"catalog"]=> 143 %unicode|string%(%d) "%s" 144 [%u|b%"max_length"]=> 145 int(0) 146 [%u|b%"length"]=> 147 int(11) 148 [%u|b%"charsetnr"]=> 149 int(63) 150 [%u|b%"flags"]=> 151 int(49155) 152 [%u|b%"type"]=> 153 int(3) 154 [%u|b%"decimals"]=> 155 int(0) 156} 157bool(true) 158object(stdClass)#%d (13) { 159 [%u|b%"name"]=> 160 %unicode|string%(2) "id" 161 [%u|b%"orgname"]=> 162 %unicode|string%(2) "id" 163 [%u|b%"table"]=> 164 %unicode|string%(4) "test" 165 [%u|b%"orgtable"]=> 166 %unicode|string%(4) "test" 167 [%u|b%"def"]=> 168 %unicode|string%(0) "" 169 [%u|b%"db"]=> 170 %unicode|string%(%d) "%s" 171 [%u|b%"catalog"]=> 172 %unicode|string%(%d) "%s" 173 [%u|b%"max_length"]=> 174 int(0) 175 [%u|b%"length"]=> 176 int(11) 177 [%u|b%"charsetnr"]=> 178 int(63) 179 [%u|b%"flags"]=> 180 int(49155) 181 [%u|b%"type"]=> 182 int(3) 183 [%u|b%"decimals"]=> 184 int(0) 185} 186bool(true) 187object(stdClass)#%d (13) { 188 [%u|b%"name"]=> 189 %unicode|string%(5) "label" 190 [%u|b%"orgname"]=> 191 %unicode|string%(5) "label" 192 [%u|b%"table"]=> 193 %unicode|string%(4) "test" 194 [%u|b%"orgtable"]=> 195 %unicode|string%(4) "test" 196 [%u|b%"def"]=> 197 %unicode|string%(0) "" 198 [%u|b%"db"]=> 199 %unicode|string%(%d) "%s" 200 [%u|b%"catalog"]=> 201 %unicode|string%(%d) "%s" 202 [%u|b%"max_length"]=> 203 int(%d) 204 [%u|b%"length"]=> 205 int(%d) 206 [%u|b%"charsetnr"]=> 207 int(%d) 208 [%u|b%"flags"]=> 209 int(0) 210 [%u|b%"type"]=> 211 int(254) 212 [%u|b%"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(): Invalid field offset in %s on line %d 222bool(false) 223bool(true) 224object(stdClass)#%d (13) { 225 [%u|b%"name"]=> 226 %unicode|string%(5) "_null" 227 [%u|b%"orgname"]=> 228 %unicode|string%(0) "" 229 [%u|b%"table"]=> 230 %unicode|string%(0) "" 231 [%u|b%"orgtable"]=> 232 %unicode|string%(0) "" 233 [%u|b%"def"]=> 234 %unicode|string%(0) "" 235 [%u|b%"db"]=> 236 %unicode|string%(0) "" 237 [%u|b%"catalog"]=> 238 %unicode|string%(%d) "%s" 239 [%u|b%"max_length"]=> 240 int(0) 241 [%u|b%"length"]=> 242 int(0) 243 [%u|b%"charsetnr"]=> 244 int(63) 245 [%u|b%"flags"]=> 246 int(32896) 247 [%u|b%"type"]=> 248 int(6) 249 [%u|b%"decimals"]=> 250 int(0) 251} 252 253Warning: mysqli_field_seek(): Couldn't fetch mysqli_result in %s on line %d 254NULL 255done! 256