1--TEST-- 2mysqli_stmt_execute() - Stored Procedures 3--SKIPIF-- 4<?php 5require_once('skipif.inc'); 6require_once('skipifconnectfailure.inc'); 7require_once('connect.inc'); 8if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { 9 die(sprintf('skip Cannot connect to MySQL, [%d] %s.', mysqli_connect_errno(), mysqli_connect_error())); 10} 11if (mysqli_get_server_version($link) <= 50000) { 12 die(sprintf('skip Needs MySQL 5.0+, found version %d.', mysqli_get_server_version($link))); 13} 14?> 15--FILE-- 16<?php 17 require_once('connect.inc'); 18 require_once('table.inc'); 19 20 if (!mysqli_query($link, 'DROP PROCEDURE IF EXISTS p')) 21 printf("[009] [%d] %s.\n", mysqli_errno($link), mysqli_error($link)); 22 23 if (mysqli_real_query($link, 'CREATE PROCEDURE p(OUT ver_param VARCHAR(25)) BEGIN SELECT VERSION() INTO ver_param; END;')) { 24 /* no result set, one output parameter */ 25 if (!$stmt = mysqli_prepare($link, 'CALL p(@version)')) 26 printf("[011] Cannot prepare CALL, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); 27 28 if (!mysqli_stmt_execute($stmt)) 29 printf("[012] Cannot execute CALL, [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 30 31 /* yes, I really want to call it twice! */ 32 if (!mysqli_stmt_execute($stmt)) 33 printf("[013] Cannot execute CALL, [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 34 35 if (!mysqli_stmt_close($stmt)) 36 printf("[014] Cannot close statement, [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 37 38 if (!$stmt = mysqli_prepare($link, 'SELECT @version AS _version')) 39 printf("[015] Cannot prepare SELECT, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); 40 41 if (!mysqli_stmt_execute($stmt)) 42 printf("[016] Cannot execute SELECT, [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 43 44 $version = 'unknown'; 45 if (!mysqli_stmt_bind_result($stmt, $version) || 46 !mysqli_stmt_fetch($stmt)) 47 printf("[017] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 48 49 if (($version == "unknown") || ($version == "")) 50 printf("[018] Results seem wrong, got %s, [%d] %s\n", 51 $version, 52 mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 53 54 mysqli_stmt_free_result($stmt); 55 mysqli_stmt_close($stmt); 56 57 } else { 58 printf("[010] Cannot create SP, [%d] %s.\n", mysqli_errno($link), mysqli_error($link)); 59 } 60 61 62 if (function_exists('mysqli_stmt_get_result')) { 63 64 if (!mysqli_query($link, 'DROP PROCEDURE IF EXISTS p')) 65 printf("[019] [%d] %s.\n", mysqli_errno($link), mysqli_error($link)); 66 67 if (mysqli_real_query($link, 'CREATE PROCEDURE p(OUT ver_param VARCHAR(25)) BEGIN SELECT VERSION() INTO ver_param; END;')) { 68 // no result set, one output parameter 69 if (!$stmt = mysqli_prepare($link, 'CALL p(@version)')) 70 printf("[020] Cannot prepare CALL, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); 71 72 if (!mysqli_stmt_execute($stmt)) 73 printf("[021] Cannot execute CALL, [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 74 75 if (!mysqli_stmt_close($stmt)) 76 printf("[022] Cannot close statement, [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 77 78 if (!$stmt = mysqli_prepare($link, 'SELECT @version AS _version')) 79 printf("[023] Cannot prepare SELECT, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); 80 81 if (!mysqli_stmt_execute($stmt)) 82 printf("[024] Cannot execute SELECT, [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 83 84 if (!$res = mysqli_stmt_get_result($stmt)) 85 printf("[025] Cannot get result set, [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 86 87 if ((!($row = mysqli_fetch_assoc($res))) || ($row['_version'] == "")) 88 printf("[026] Results seem wrong, got %s, [%d] %s\n", 89 $row['_version'], 90 mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 91 92 mysqli_free_result($res); 93 mysqli_stmt_close($stmt); 94 95 } else { 96 printf("[027] Cannot create SP, [%d] %s.\n", mysqli_errno($link), mysqli_error($link)); 97 } 98 99 } 100 101 if (!mysqli_query($link, 'DROP PROCEDURE IF EXISTS p')) 102 printf("[028] [%d] %s.\n", mysqli_errno($link), mysqli_error($link)); 103 104 if (mysqli_real_query($link, 'CREATE PROCEDURE p(IN ver_in VARCHAR(25), OUT ver_out VARCHAR(25)) BEGIN SELECT ver_in INTO ver_out; END;')) { 105 // no result set, one input parameter, output parameter 106 // yes, I really do not want to bind input values... 107 if (!$stmt = mysqli_prepare($link, "CALL p('myversion', @version)")) 108 printf("[029] Cannot prepare CALL, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); 109 110 if (!mysqli_stmt_execute($stmt)) 111 printf("[030] Cannot execute CALL, [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 112 113 if (!mysqli_stmt_close($stmt)) 114 printf("[031] Cannot close statement, [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 115 116 if (!$stmt = mysqli_prepare($link, 'SELECT @version AS _version')) 117 printf("[032] Cannot prepare SELECT, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); 118 119 if (!mysqli_stmt_execute($stmt)) 120 printf("[033] Cannot execute SELECT, [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 121 122 $version = 'unknown'; 123 if (!mysqli_stmt_bind_result($stmt, $version) || 124 !mysqli_stmt_fetch($stmt)) 125 printf("[034] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 126 127 if ($version != "myversion") 128 printf("[035] Results seem wrong, got %s, [%d] %s\n", 129 $version, 130 mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 131 132 mysqli_stmt_free_result($stmt); 133 mysqli_stmt_close($stmt); 134 135 } else { 136 printf("[036] Cannot create SP, [%d] %s.\n", mysqli_errno($link), mysqli_error($link)); 137 } 138 139 if (!mysqli_query($link, 'DROP PROCEDURE IF EXISTS p')) 140 printf("[037] [%d] %s.\n", mysqli_errno($link), mysqli_error($link)); 141 142 if (mysqli_real_query($link, 'CREATE PROCEDURE p(IN ver_in VARCHAR(25), OUT ver_out VARCHAR(25)) BEGIN SELECT ver_in INTO ver_out; END;')) { 143 // no result set, one input parameter, output parameter 144 // yes, I really do not want to bind input values... 145 if (!$stmt = mysqli_prepare($link, 'CALL p(?, @version)')) 146 printf("[038] Cannot prepare CALL, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); 147 148 $version = 'myversion'; 149 if (!mysqli_stmt_bind_param($stmt, 's', $version)) 150 printf("[039] Cannot bind input parameter, [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 151 152 if (!mysqli_stmt_execute($stmt)) 153 printf("[040] Cannot execute CALL, [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 154 155 if (!mysqli_stmt_close($stmt)) 156 printf("[041] Cannot close statement, [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 157 158 if (!$stmt = mysqli_prepare($link, 'SELECT @version AS _version')) 159 printf("[042] Cannot prepare SELECT, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); 160 161 if (!mysqli_stmt_execute($stmt)) 162 printf("[043] Cannot execute SELECT, [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 163 164 $version = 'unknown'; 165 if (!mysqli_stmt_bind_result($stmt, $version) || 166 !mysqli_stmt_fetch($stmt)) 167 printf("[044] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 168 169 if ($version !== "myversion") 170 printf("[045] Results seem wrong, got %s, [%d] %s\n", 171 $version, 172 mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 173 174 mysqli_stmt_free_result($stmt); 175 mysqli_stmt_close($stmt); 176 177 } else { 178 printf("[046] Cannot create SP, [%d] %s.\n", mysqli_errno($link), mysqli_error($link)); 179 } 180 181 mysqli_close($link); 182 print "done!"; 183?> 184--CLEAN-- 185<?php 186require_once("connect.inc"); 187if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) 188 printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); 189 190if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bind_fetch")) 191 printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); 192 193@mysqli_query($link, 'DROP PROCEDURE IF EXISTS p'); 194 195mysqli_close($link); 196?> 197--EXPECT-- 198done! 199