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