1--TEST-- 2mysqli_stmt_bind_param() - playing with references 3--SKIPIF-- 4<?php 5require_once('skipif.inc'); 6require_once('skipifconnectfailure.inc'); 7?> 8--FILE-- 9<?php 10 require('table.inc'); 11 12 function findRow($offset, $link, $id, $label) { 13 14 $sql = sprintf("SELECT id, label FROM test WHERE id = '%d' AND label = '%s'", 15 $id, $label); 16 if (!$res = mysqli_query($link, $sql)) { 17 printf("[%03d + 1] %s failed, [%d] %s\n", 18 $offset, $sql, mysqli_errno($link), mysqli_error($link)); 19 return false; 20 } 21 if (!$row = mysqli_fetch_assoc($res)) { 22 printf("[%03d + 2] fetch for %s failed, [%d] %s\n", 23 $offset, $sql, mysqli_errno($link), mysqli_error($link)); 24 return false; 25 } 26 27 mysqli_free_result($res); 28 if ($row['id'] != $id) { 29 printf("[%03d + 3] Expecting %s/%s got %s/%s\n", 30 $offset, gettype($id), $id, 31 gettype($row['id']), $row['id'] 32 ); 33 return false; 34 } 35 36 if ($row['label'] != $label) { 37 printf("[%03d + 4] Expecting %s/%s got %s/%s\n", 38 $offset, gettype($label), $label, 39 gettype($row['label']), $row['label'] 40 ); 41 return false; 42 } 43 44 $sql = sprintf("DELETE FROM test WHERE id = '%d' AND label = '%s'", 45 $id, $label); 46 if (!mysqli_query($link, $sql)) { 47 printf("[%03d + 5] %s failed, [%d] %s\n", 48 $offset, $sql, mysqli_errno($link), mysqli_error($link)); 49 return false; 50 } 51 52 return true; 53 } 54 // or we will get dups around [28] 55 mysqli_query($link, "ALTER TABLE test DROP PRIMARY KEY"); 56 57 $stmt = mysqli_stmt_init($link); 58 if (!mysqli_stmt_prepare($stmt, "INSERT INTO test(id, label) VALUES (?, ?)")) 59 printf("[001] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 60 61 $id = 100; 62 $label = 'v'; 63 if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id, $label))) 64 printf("[002] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp); 65 66 if (true !== mysqli_stmt_execute($stmt)) 67 printf("[003] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 68 // no need to check the return value, will bail and make EXPECTF fail if need be 69 findRow(4, $link, $id, $label); 70 71 $id++; 72 $label_ref = &$label; 73 $label = 'w'; 74 if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id, $label_ref))) 75 printf("[005] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp); 76 77 if (true !== mysqli_stmt_execute($stmt)) 78 printf("[006] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 79 findRow(7, $link, $id, $label_ref); 80 81 $id++; 82 $label_ref_ref = &$label_ref; 83 $label = 'x'; 84 85 if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id, $label_ref_ref))) 86 printf("[007] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp); 87 88 if (true !== mysqli_stmt_execute($stmt)) 89 printf("[008] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 90 findRow(9, $link, $id, $label_ref_ref); 91 92 $id = 9; 93 $label = $id; 94 $label_num = &$label; 95 96 if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id, $label_num))) 97 printf("[010] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp); 98 99 if (true !== mysqli_stmt_execute($stmt)) 100 printf("[011] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 101 findRow(12, $link, $id, $label_num); 102 103 $label_num = &$id; 104 if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id, $label_num))) 105 printf("[013] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp); 106 107 if (true !== mysqli_stmt_execute($stmt)) 108 printf("[014] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 109 findRow(15, $link, $id, $label_num); 110 111 $label = 9; 112 $id = &$label; 113 114 if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id, $label))) 115 printf("[015] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp); 116 117 if (true !== mysqli_stmt_execute($stmt)) 118 printf("[016] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 119 findRow(17, $link, $id, $label); 120 121 $base = 9; 122 $id = &$base; 123 $label = &$id; 124 125 if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id, $label))) 126 printf("[018] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp); 127 128 if (true !== mysqli_stmt_execute($stmt)) 129 printf("[019] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 130 findRow(20, $link, $id, $label); 131 132 $id_ref = &$id; 133 $label_ref = &$label; 134 135 if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id_ref, $label_ref))) 136 printf("[021] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp); 137 138 if (true !== mysqli_stmt_execute($stmt)) 139 printf("[022] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 140 findRow(23, $link, $id_ref, $label_ref); 141 142 $id_ref_ref = &$GLOBALS['id_ref']; 143 $label_ref_ref = &$GLOBALS['label_ref_ref']; 144 145 if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id_ref_ref, $label_ref_ref))) 146 printf("[024] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp); 147 148 if (true !== mysqli_stmt_execute($stmt)) 149 printf("[025] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 150 findRow(26, $link, $id_ref_ref, $label_ref_ref); 151 152 unset($id); 153 unset($label); 154 $id = 102; 155 $label = new stdClass(); 156 $label->label = 'y'; 157 $id_ref = &$GLOBALS['id']; 158 $label_ref = &$label->label; 159 if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id_ref, $label_ref))) 160 printf("[027] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp); 161 if (true !== @mysqli_stmt_execute($stmt)) 162 printf("[028] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 163 findRow(29, $link, $id_ref, $label_ref); 164 165 $id = 103; 166 $label_a = &$label_b; 167 $label_b = &$label_a; 168 $label_a = 'z'; 169 170 if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id, $label_b))) 171 printf("[030] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp); 172 173 if (true !== mysqli_stmt_execute($stmt)) 174 printf("[031] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 175 findRow(32, $link, $id, $label_b); 176 177 class foo { 178 public $foo; 179 function __construct() { 180 $this->foo = &$this->bar; 181 } 182 } 183 class bar extends foo { 184 public $bar = 'v'; 185 } 186 $bar = new bar(); 187 $id++; 188 $label = &$GLOBALS['bar']->foo; 189 190 if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id, $label))) 191 printf("[033] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp); 192 193 if (true !== mysqli_stmt_execute($stmt)) 194 printf("[034] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 195 findRow(35, $link, $id, $label); 196 197 mysqli_stmt_close($stmt); 198 mysqli_close($link); 199 print "done!"; 200?> 201--CLEAN-- 202<?php 203 require_once("clean_table.inc"); 204?> 205--EXPECT-- 206done! 207