mysqli_class_mysqli_interface.phpt 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. --TEST--
  2. Interface of the class mysqli
  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. $mysqli = new mysqli($host, $user, $passwd, $db, $port, $socket);
  13. $link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
  14. printf("Parent class:\n");
  15. var_dump(get_parent_class($mysqli));
  16. printf("\nMethods:\n");
  17. $methods = get_class_methods($mysqli);
  18. $expected_methods = array(
  19. '__construct' => true,
  20. 'autocommit' => true,
  21. 'begin_transaction' => true,
  22. 'change_user' => true,
  23. 'character_set_name' => true,
  24. 'close' => true,
  25. 'commit' => true,
  26. 'connect' => true,
  27. 'dump_debug_info' => true,
  28. 'escape_string' => true,
  29. 'get_charset' => true,
  30. 'get_client_info' => true,
  31. 'get_server_info' => true,
  32. 'get_warnings' => true,
  33. 'init' => true,
  34. 'kill' => true,
  35. 'more_results' => true,
  36. 'multi_query' => true,
  37. 'next_result' => true,
  38. 'options' => true,
  39. 'ping' => true,
  40. 'prepare' => true,
  41. 'query' => true,
  42. 'real_connect' => true,
  43. 'real_escape_string' => true,
  44. 'real_query' => true,
  45. 'refresh' => true,
  46. 'rollback' => true,
  47. 'release_savepoint' => true,
  48. 'savepoint' => true,
  49. 'select_db' => true,
  50. 'set_charset' => true,
  51. 'set_opt' => true,
  52. 'ssl_set' => true,
  53. 'stat' => true,
  54. 'stmt_init' => true,
  55. 'store_result' => true,
  56. 'thread_safe' => true,
  57. 'use_result' => true,
  58. );
  59. if ($IS_MYSQLND) {
  60. // mysqlnd only
  61. /* $expected_methods['get_client_stats'] = true; */
  62. $expected_methods['get_connection_stats'] = true;
  63. $expected_methods['reap_async_query'] = true;
  64. $expected_methods['poll'] = true;
  65. }
  66. /* we should add ruled when to expect them */
  67. if (function_exists('mysqli_debug'))
  68. $expected_methods['debug'] = true;
  69. if (function_exists('ssl_set'))
  70. $expected_methods['ssl_set'] = true;
  71. foreach ($methods as $k => $method) {
  72. if (isset($expected_methods[$method])) {
  73. unset($methods[$k]);
  74. unset($expected_methods[$method]);
  75. }
  76. }
  77. if (!empty($methods)) {
  78. printf("Dumping list of unexpected methods.\n");
  79. var_dump($methods);
  80. }
  81. if (!empty($expected_methods)) {
  82. printf("Dumping list of missing methods.\n");
  83. var_dump($expected_methods);
  84. }
  85. if (empty($methods) && empty($expected_methods))
  86. printf("ok\n");
  87. printf("\nClass variables:\n");
  88. $expected_class_variables = $expected_object_variables = array(
  89. "affected_rows" => true,
  90. "client_info" => true,
  91. "client_version" => true,
  92. "connect_errno" => true,
  93. "connect_error" => true,
  94. "errno" => true,
  95. "error" => true,
  96. "field_count" => true,
  97. "host_info" => true,
  98. "info" => true,
  99. "insert_id" => true,
  100. "protocol_version" => true,
  101. "server_info" => true,
  102. "server_version" => true,
  103. "sqlstate" => true,
  104. "stat" => true,
  105. "thread_id" => true,
  106. "warning_count" => true,
  107. );
  108. $expected_class_variables["error_list"] = true;
  109. $expected_object_variables["error_list"] = true;
  110. $variables = get_class_vars(get_class($mysqli));
  111. foreach ($variables as $var => $v) {
  112. if (isset($expected_class_variables[$var])) {
  113. unset($expected_class_variables[$var]);
  114. unset($variables[$var]);
  115. }
  116. }
  117. if (!empty($expected_class_variables)) {
  118. printf("Dumping list of missing class variables\n");
  119. var_dump($expected_class_variables);
  120. }
  121. if (!empty($variables)) {
  122. printf("Dumping list of unexpected class variables\n");
  123. var_dump($variables);
  124. }
  125. echo "ok\n";
  126. printf("\nObject variables:\n");
  127. $variables = get_object_vars($mysqli);
  128. foreach ($variables as $var => $v) {
  129. if (isset($expected_object_variables[$var])) {
  130. unset($expected_object_variables[$var]);
  131. unset($variables[$var]);
  132. }
  133. }
  134. if (!empty($expected_object_variables)) {
  135. printf("Dumping list of missing object variables\n");
  136. var_dump($expected_object_variables);
  137. }
  138. if (!empty($variables)) {
  139. printf("Dumping list of unexpected object variables\n");
  140. var_dump($variables);
  141. }
  142. echo "ok\n";
  143. printf("\nMagic, magic properties:\n");
  144. assert(mysqli_affected_rows($link) === $mysqli->affected_rows);
  145. printf("mysqli->affected_rows = '%s'/%s ('%s'/%s)\n",
  146. $mysqli->affected_rows, gettype($mysqli->affected_rows),
  147. mysqli_affected_rows($link), gettype(mysqli_affected_rows($link)));
  148. assert(mysqli_get_client_info() === $mysqli->client_info);
  149. printf("mysqli->client_info = '%s'/%s ('%s'/%s)\n",
  150. $mysqli->client_info, gettype($mysqli->client_info),
  151. mysqli_get_client_info(), gettype(mysqli_get_client_info()));
  152. assert(mysqli_get_client_version() === $mysqli->client_version);
  153. printf("mysqli->client_version = '%s'/%s ('%s'/%s)\n",
  154. $mysqli->client_version, gettype($mysqli->client_version),
  155. mysqli_get_client_version(), gettype(mysqli_get_client_version()));
  156. assert(mysqli_errno($link) === $mysqli->errno);
  157. printf("mysqli->errno = '%s'/%s ('%s'/%s)\n",
  158. $mysqli->errno, gettype($mysqli->errno),
  159. mysqli_errno($link), gettype(mysqli_errno($link)));
  160. assert(mysqli_error($link) === $mysqli->error);
  161. printf("mysqli->error = '%s'/%s ('%s'/%s)\n",
  162. $mysqli->error, gettype($mysqli->error),
  163. mysqli_error($link), gettype(mysqli_error($link)));
  164. assert(mysqli_error_list($link) === $mysqli->error_list);
  165. assert(is_array($mysqli->error_list));
  166. assert(mysqli_field_count($link) === $mysqli->field_count);
  167. printf("mysqli->field_count = '%s'/%s ('%s'/%s)\n",
  168. $mysqli->field_count, gettype($mysqli->field_count),
  169. mysqli_field_count($link), gettype(mysqli_field_count($link)));
  170. assert(mysqli_insert_id($link) === $mysqli->insert_id);
  171. printf("mysqli->insert_id = '%s'/%s ('%s'/%s)\n",
  172. $mysqli->insert_id, gettype($mysqli->insert_id),
  173. mysqli_insert_id($link), gettype(mysqli_insert_id($link)));
  174. assert(mysqli_sqlstate($link) === $mysqli->sqlstate);
  175. printf("mysqli->sqlstate = '%s'/%s ('%s'/%s)\n",
  176. $mysqli->sqlstate, gettype($mysqli->sqlstate),
  177. mysqli_sqlstate($link), gettype(mysqli_sqlstate($link)));
  178. assert(soundex(mysqli_stat($link)) == soundex($mysqli->stat));
  179. printf("mysqli->stat = '%s'/%s ('%s'/%s)\n",
  180. $mysqli->stat, gettype($mysqli->stat),
  181. mysqli_stat($link), gettype(mysqli_stat($link)));
  182. assert(mysqli_get_host_info($link) === $mysqli->host_info);
  183. printf("mysqli->host_info = '%s'/%s ('%s'/%s)\n",
  184. $mysqli->host_info, gettype($mysqli->host_info),
  185. mysqli_get_host_info($link), gettype(mysqli_get_host_info($link)));
  186. /* note that the data types are different */
  187. assert(mysqli_info($link) == $mysqli->info);
  188. printf("mysqli->info = '%s'/%s ('%s'/%s)\n",
  189. $mysqli->info, gettype($mysqli->info),
  190. mysqli_info($link), gettype(mysqli_info($link)));
  191. assert(mysqli_thread_id($link) > $mysqli->thread_id);
  192. assert(gettype($mysqli->thread_id) == gettype(mysqli_thread_id($link)));
  193. printf("mysqli->thread_id = '%s'/%s ('%s'/%s)\n",
  194. $mysqli->thread_id, gettype($mysqli->thread_id),
  195. mysqli_thread_id($link), gettype(mysqli_thread_id($link)));
  196. assert(mysqli_get_proto_info($link) === $mysqli->protocol_version);
  197. printf("mysqli->protocol_version = '%s'/%s ('%s'/%s)\n",
  198. $mysqli->protocol_version, gettype($mysqli->protocol_version),
  199. mysqli_get_proto_info($link), gettype(mysqli_get_proto_info($link)));
  200. assert(mysqli_get_server_info($link) === $mysqli->server_info);
  201. printf("mysqli->server_info = '%s'/%s ('%s'/%s)\n",
  202. $mysqli->server_info, gettype($mysqli->server_info),
  203. mysqli_get_server_info($link), gettype(mysqli_get_server_info($link)));
  204. assert(mysqli_get_server_version($link) === $mysqli->server_version);
  205. printf("mysqli->server_version = '%s'/%s ('%s'/%s)\n",
  206. $mysqli->server_version, gettype($mysqli->server_version),
  207. mysqli_get_server_version($link), gettype(mysqli_get_server_version($link)));
  208. assert(mysqli_warning_count($link) === $mysqli->warning_count);
  209. printf("mysqli->warning_count = '%s'/%s ('%s'/%s)\n",
  210. $mysqli->warning_count, gettype($mysqli->warning_count),
  211. mysqli_warning_count($link), gettype(mysqli_warning_count($link)));
  212. printf("\nAccess to undefined properties:\n");
  213. printf("mysqli->unknown = '%s'\n", @$mysqli->unknown);
  214. @$mysqli->unknown = 13;
  215. printf("setting mysqli->unknown, mysqli_unknown = '%s'\n", @$mysqli->unknown);
  216. $unknown = 'friday';
  217. @$mysqli->unknown = $unknown;
  218. printf("setting mysqli->unknown, mysqli_unknown = '%s'\n", @$mysqli->unknown);
  219. $mysqli = new my_mysqli($host, $user, $passwd, $db, $port, $socket);
  220. printf("\nAccess hidden properties for MYSLQI_STATUS_INITIALIZED (TODO documentation):\n");
  221. assert(mysqli_connect_error() === $mysqli->connect_error);
  222. printf("mysqli->connect_error = '%s'/%s ('%s'/%s)\n",
  223. $mysqli->connect_error, gettype($mysqli->connect_error),
  224. mysqli_connect_error(), gettype(mysqli_connect_error()));
  225. assert(mysqli_connect_errno() === $mysqli->connect_errno);
  226. printf("mysqli->connect_errno = '%s'/%s ('%s'/%s)\n",
  227. $mysqli->connect_errno, gettype($mysqli->connect_errno),
  228. mysqli_connect_errno(), gettype(mysqli_connect_errno()));
  229. print "done!";
  230. ?>
  231. --EXPECTF--
  232. Parent class:
  233. bool(false)
  234. Methods:
  235. ok
  236. Class variables:
  237. ok
  238. Object variables:
  239. ok
  240. Magic, magic properties:
  241. mysqli->affected_rows = '%s'/integer ('%s'/integer)
  242. mysqli->client_info = '%s'/string ('%s'/string)
  243. mysqli->client_version = '%d'/integer ('%d'/integer)
  244. mysqli->errno = '0'/integer ('0'/integer)
  245. mysqli->error = ''/string (''/string)
  246. mysqli->field_count = '0'/integer ('0'/integer)
  247. mysqli->insert_id = '0'/integer ('0'/integer)
  248. mysqli->sqlstate = '00000'/string ('00000'/string)
  249. mysqli->stat = 'Uptime: %d Threads: %d Questions: %d Slow queries: %d Opens: %d Flush tables: %d Open tables: %d Queries per second avg: %d.%d'/string ('Uptime: %d Threads: %d Questions: %d Slow queries: %d Opens: %d Flush tables: %d Open tables: %d Queries per second avg: %d.%d'/string)
  250. mysqli->host_info = '%s'/string ('%s'/string)
  251. mysqli->info = ''/NULL (''/NULL)
  252. mysqli->thread_id = '%d'/integer ('%d'/integer)
  253. mysqli->protocol_version = '%d'/integer ('%d'/integer)
  254. mysqli->server_info = '%s'/string ('%s'/string)
  255. mysqli->server_version = '%d'/integer ('%d'/integer)
  256. mysqli->warning_count = '0'/integer ('0'/integer)
  257. Access to undefined properties:
  258. mysqli->unknown = ''
  259. setting mysqli->unknown, mysqli_unknown = '13'
  260. setting mysqli->unknown, mysqli_unknown = 'friday'
  261. Access hidden properties for MYSLQI_STATUS_INITIALIZED (TODO documentation):
  262. mysqli->connect_error = ''/NULL (''/NULL)
  263. mysqli->connect_errno = '0'/integer ('0'/integer)
  264. done!