1--TEST-- 2Interface of the class mysqli_stmt 3--EXTENSIONS-- 4mysqli 5--SKIPIF-- 6<?php 7 require_once 'skipifconnectfailure.inc'; 8?> 9--FILE-- 10<?php 11 require 'table.inc'; 12 13 $link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket); 14 $stmt = new mysqli_stmt($link); 15 16 printf("Parent class:\n"); 17 var_dump(get_parent_class($stmt)); 18 19 printf("\nMethods:\n"); 20 21 $methods = get_class_methods($stmt); 22 $expected_methods = array( 23 '__construct' => true, 24 'attr_get' => true, 25 'attr_set' => true, 26 'bind_param' => true, 27 'bind_result' => true, 28 'close' => true, 29 'data_seek' => true, 30 'execute' => true, 31 'fetch' => true, 32 'free_result' => true, 33 'get_warnings' => true, 34 'num_rows' => true, 35 'prepare' => true, 36 'reset' => true, 37 'result_metadata' => true, 38 'send_long_data' => true, 39 'store_result' => true, 40 ); 41 42 $expected_methods['get_result'] = true; 43 $expected_methods['more_results'] = true; 44 $expected_methods['next_result'] = true; 45 46 foreach ($methods as $k => $method) { 47 if (isset($expected_methods[$method])) { 48 unset($methods[$k]); 49 unset($expected_methods[$method]); 50 } 51 if ($method == 'mysqli_stmt') { 52 // get_class_method reports different constructor names 53 unset($expected_methods['__construct']); 54 unset($methods[$k]); 55 } 56 } 57 if (!empty($methods)) { 58 printf("More methods found than indicated. Dumping list of unexpected methods.\n"); 59 var_dump($methods); 60 } 61 if (!empty($expected_methods)) { 62 printf("Some methods are missing. Dumping list of missing methods.\n"); 63 var_dump($expected_methods); 64 } 65 if (empty($methods) && empty($expected_methods)) 66 printf("ok\n"); 67 68 printf("\nClass variables:\n"); 69 $variables = array_keys(get_class_vars(get_class($stmt))); 70 sort($variables); 71 foreach ($variables as $var) 72 printf("%s\n", $var); 73 74 printf("\nObject variables:\n"); 75 $variables = array_keys(get_object_vars($stmt)); 76 foreach ($variables as $var) 77 printf("%s\n", $var); 78 79printf("\nMagic, magic properties:\n"); 80 81try { 82 mysqli_stmt_affected_rows($stmt); 83} catch (Error $exception) { 84 echo $exception->getMessage() . "\n"; 85} 86 87try { 88 $stmt->affected_rows; 89} catch (Error $exception) { 90 echo $exception->getMessage() . "\n"; 91} 92 93if (!$stmt->prepare("INSERT INTO test(id, label) VALUES (100, 'z')") || !$stmt->execute()) { 94 printf("[001] [%d] %s\n", $stmt->errno, $stmt->error); 95} 96 97assert(mysqli_stmt_affected_rows($stmt) === $stmt->affected_rows); 98printf("stmt->affected_rows = '%s'\n", $stmt->affected_rows); 99 100assert(mysqli_stmt_errno($stmt) === $stmt->errno); 101printf("stmt->errno = '%s'\n", $stmt->errno); 102 103assert(mysqli_stmt_error($stmt) === $stmt->error); 104printf("stmt->error = '%s'\n", $stmt->error); 105 106assert(mysqli_stmt_error_list($stmt) === $stmt->error_list); 107var_dump("stmt->error = ", $stmt->error_list); 108 109assert(mysqli_stmt_field_count($stmt) === $stmt->field_count); 110printf("stmt->field_count = '%s'\n", $stmt->field_count); 111 112assert($stmt->id > 0); 113printf("stmt->id = '%s'\n", $stmt->id); 114 115assert(mysqli_stmt_insert_id($stmt) === $stmt->insert_id); 116printf("stmt->insert_id = '%s'\n", $stmt->insert_id); 117 118assert(mysqli_stmt_num_rows($stmt) === $stmt->num_rows); 119printf("stmt->num_rows = '%s'\n", $stmt->num_rows); 120 121assert(mysqli_stmt_param_count($stmt) === $stmt->param_count); 122printf("stmt->param_count = '%s'\n", $stmt->param_count); 123 124assert(mysqli_stmt_sqlstate($stmt) === $stmt->sqlstate); 125printf("stmt->sqlstate = '%s'\n", $stmt->sqlstate); 126 127printf("\nAccess to undefined properties:\n"); 128printf("stmt->unknown = '%s'\n", @$stmt->unknown); 129@$stmt->unknown = 13; 130printf("stmt->unknown = '%s'\n", @$stmt->unknown); 131 132print "done!"; 133?> 134--EXPECTF-- 135Parent class: 136bool(false) 137 138Methods: 139ok 140 141Class variables: 142affected_rows 143errno 144error 145error_list 146field_count 147id 148insert_id 149num_rows 150param_count 151sqlstate 152 153Object variables: 154 155Magic, magic properties: 156mysqli_stmt object is not fully initialized 157Property access is not allowed yet 158stmt->affected_rows = '1' 159stmt->errno = '0' 160stmt->error = '' 161string(14) "stmt->error = " 162array(0) { 163} 164stmt->field_count = '0' 165stmt->id = '%d' 166stmt->insert_id = '0' 167stmt->num_rows = '0' 168stmt->param_count = '0' 169stmt->sqlstate = '00000' 170 171Access to undefined properties: 172stmt->unknown = '' 173stmt->unknown = '13' 174done! 175