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--EXPECTF--
129[010] More results: yes
130[011] Next result: yes
131done!