mysqli_field_seek.phpt 5.2 KB

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