1--TEST--
2mysqli_stmt_execute() - OUT
3--EXTENSIONS--
4mysqli
5--SKIPIF--
6<?php
7require_once 'connect.inc';
8if (!$link = @my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) {
9    die(sprintf("skip Can't connect to MySQL Server - [%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), OUT ver_out VARCHAR(25)) BEGIN SELECT ver_in INTO ver_out; END;')) {
28        if (!$stmt = mysqli_prepare($link, 'CALL p(?, ?)'))
29            printf("[005] Cannot prepare CALL, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
30
31        $ver_in = 'myversion';
32        $ver_out = '';
33        if (!mysqli_stmt_bind_param($stmt, 'ss', $ver_in, $ver_out))
34            printf("[006] Cannot bind 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        printf("[008] More results: %s\n", (mysqli_more_results($link) ? "yes" : "no"));
40        printf("[009] Next results: %s\n", (mysqli_next_result($link) ? "yes" : "no"));
41
42        try {
43            if (!mysqli_stmt_bind_result($stmt, $ver_out) || !mysqli_stmt_fetch($stmt))
44                printf("[010] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
45        } catch (\ArgumentCountError $e) {
46            echo $e->getMessage() . \PHP_EOL;
47        }
48
49        if ("myversion" !== $ver_out)
50            printf("[011] Results seem wrong got '%s'\n", $ver_out);
51
52        if (!mysqli_stmt_close($stmt))
53            printf("[012] Cannot close statement, [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
54
55        if (false === $link->query("SELECT 1"))
56            printf("[013] [%d] %s\n", $link->errno, $link->error);
57
58    } else {
59        printf("[004] Cannot create SP, [%d] %s.\n", mysqli_errno($link), mysqli_error($link));
60    }
61
62    mysqli_close($link);
63    print "done!";
64?>
65--CLEAN--
66<?php
67require_once 'connect.inc';
68if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
69   printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
70
71@mysqli_query($link, 'DROP PROCEDURE IF EXISTS p');
72
73mysqli_close($link);
74?>
75--XFAIL--
76Unsupported and undefined, under development
77--EXPECTF--
78[008] More results: %s
79[009] Next results: %s
80done!
81