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