1--TEST-- 2mysqli_stmt_execute() - SP, next result 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) < 50503) { 12 die(sprintf('skip Needs MySQL 5.5.3+, found version %d.', mysqli_get_server_version($link))); 13} 14?> 15--FILE-- 16<?php 17 require_once('connect.inc'); 18 19 if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) { 20 printf("[001] Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n", 21 $host, $user, $db, $port, $socket); 22 } 23 24 if (!mysqli_query($link, 'DROP PROCEDURE IF EXISTS p')) 25 printf("[003] [%d] %s.\n", mysqli_errno($link), mysqli_error($link)); 26 27 if (mysqli_real_query($link, 'CREATE PROCEDURE p(IN ver_in VARCHAR(25)) BEGIN SELECT ver_in AS _ver_out; END;')) { 28 // one result set 29 if (!$stmt = mysqli_prepare($link, 'CALL p(?)')) 30 printf("[005] Cannot prepare CALL, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); 31 32 $version = 'myversion'; 33 if (!mysqli_stmt_bind_param($stmt, 's', $version)) 34 printf("[006] Cannot bind input parameter, [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 35 36 if (!mysqli_stmt_execute($stmt)) 37 printf("[007] Cannot execute CALL, [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 38 39 $version = 'unknown'; 40 if (!mysqli_stmt_bind_result($stmt, $version) || 41 !mysqli_stmt_fetch($stmt)) 42 printf("[008] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 43 44 if ($version !== "myversion") 45 printf("[009] Results seem wrong, got %s, [%d] %s\n", 46 $version, 47 mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 48 49 mysqli_stmt_free_result($stmt); 50 51 printf("[010] More results: %s\n", (mysqli_more_results($link)) ? "yes" : "no"); 52 printf("[011] Next result: %s\n", (mysqli_next_result($link)) ? "yes" : "no"); 53 54 if (!mysqli_stmt_close($stmt)) 55 printf("[012] Cannot close statement, [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 56 57 if (!$link->query("SELECT 1")) 58 printf("[013] [%d] %s\n", $link->errno, $link->error); 59 60 } else { 61 printf("[004] Cannot create SP, [%d] %s.\n", mysqli_errno($link), mysqli_error($link)); 62 } 63 64 if (!mysqli_query($link, 'DROP PROCEDURE IF EXISTS p')) 65 printf("[014] [%d] %s.\n", mysqli_errno($link), mysqli_error($link)); 66 67 if (mysqli_real_query($link, 'CREATE PROCEDURE p(IN ver_in VARCHAR(25)) BEGIN SELECT ver_in AS _ver_out; SELECT 1 AS _more; END;')) { 68 // two result sets 69 if (!$stmt = mysqli_prepare($link, 'CALL p(?)')) 70 printf("[015] Cannot prepare CALL, [%d] %s\n", mysqli_errno($link), mysqli_error($link)); 71 72 $version = 'myversion'; 73 if (!mysqli_stmt_bind_param($stmt, 's', $version)) 74 printf("[016] Cannot bind input parameter, [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 75 76 if (!mysqli_stmt_execute($stmt)) 77 printf("[017] Cannot execute CALL, [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 78 79 $version = NULL; 80 if (!mysqli_stmt_bind_result($stmt, $version) || 81 !mysqli_stmt_fetch($stmt)) 82 printf("[018] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 83 84 if ($version !== "myversion") 85 printf("[019] Results seem wrong, got %s, [%d] %s\n", 86 $version, 87 mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 88 89 if (!mysqli_more_results($link) || !mysqli_next_result($link)) 90 printf("[020] [%d] %s\n", $link->errno, $link->error); 91 92 $more = NULL; 93 if (!mysqli_stmt_bind_result($stmt, $more) || 94 !mysqli_stmt_fetch($stmt)) 95 printf("[021] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 96 97 if ($more !== 1) 98 printf("[022] Results seem wrong, got %s, [%d] %s\n", 99 $more, 100 mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 101 102 if (!mysqli_stmt_close($stmt)) 103 printf("[023] Cannot close statement, [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); 104 105 106 if (!$link->query("SELECT 1")) 107 printf("[024] [%d] %s\n", $link->errno, $link->error); 108 109 } else { 110 printf("[025] Cannot create SP, [%d] %s.\n", mysqli_errno($link), mysqli_error($link)); 111 } 112 113 mysqli_close($link); 114 print "done!"; 115?> 116--CLEAN-- 117<?php 118require_once("connect.inc"); 119if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) 120 printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); 121 122@mysqli_query($link, 'DROP PROCEDURE IF EXISTS p'); 123 124mysqli_close($link); 125?> 126--XFAIL-- 127Unsupported and undefined, under development 128--EXPECT-- 129[010] More results: yes 130[011] Next result: yes 131done! 132