1--TEST--
2mysqli_stmt_get_result() - SHOW, DESCRIBE, EXPLAIN
3--SKIPIF--
4<?php
5require_once('skipif.inc');
6require_once('skipifemb.inc');
7require_once('skipifconnectfailure.inc');
8
9if (!function_exists('mysqli_stmt_get_result'))
10    die('skip mysqli_stmt_get_result not available');
11?>
12--FILE--
13<?php
14    /*
15    NOTE: no datatype tests here! This is done by
16    mysqli_stmt_bind_result.phpt already. Restrict
17    this test case to the basics.
18    */
19    require('table.inc');
20
21    if (!$stmt = mysqli_stmt_init($link))
22        printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
23
24    if (mysqli_query($link, 'PREPARE mystmt FROM "SHOW ENGINES"')) {
25        mysqli_query($link, 'DEALLOCATE PREPARE mystmt');
26
27        if (!$stmt->prepare('SHOW ENGINES') ||
28            !$stmt->execute())
29            printf("[002] [%d] %s\n", $stmt->errno, $stmt->error);
30
31        if (!$res = $stmt->get_result())
32            printf("[003] [%d] %s\n", $stmt->errno, $stmt->error);
33
34        $engines = mysqli_fetch_all($res, MYSQLI_NUM);
35        if	(empty($engines)) {
36            printf("[004] It is very unlikely that SHOW ENGINES returns no data, check manually\n");
37        } else {
38            $found = false;
39            foreach ($engines as $k => $engine)
40                foreach ($engine as $k => $v)
41                    if (stristr($v, 'MyISAM')) {
42                        $found = true;
43                        break;
44                    }
45            if (!$found)
46                printf("[005] It is very unlikely that SHOW ENGINES does not show MyISAM, check manually\n");
47        }
48        mysqli_free_result($res);
49    }
50
51    if (mysqli_query($link, 'PREPARE mystmt FROM "DESCRIBE test id"')) {
52        mysqli_query($link, 'DEALLOCATE PREPARE mystmt');
53
54        if (!$stmt->prepare('DESCRIBE test id') ||
55            !$stmt->execute())
56            printf("[006] [%d] %s\n", $stmt->errno, $stmt->error);
57
58        if (!$res = $stmt->get_result())
59            printf("[007] [%d] %s\n", $stmt->errno, $stmt->error);
60
61        $description = mysqli_fetch_assoc($res);
62        if ($description['Field'] != 'id') {
63            printf("[008] Returned data seems wrong, [%d] %s\n",
64                mysqli_errno($link), mysqli_error($link));
65            var_dump($description);
66        }
67        mysqli_free_result($res);
68    }
69
70    if (mysqli_query($link, 'PREPARE mystmt FROM "EXPLAIN SELECT id FROM test"')) {
71        mysqli_query($link, 'DEALLOCATE PREPARE mystmt');
72
73        if (!$stmt->prepare('EXPLAIN SELECT id FROM test') ||
74            !$stmt->execute())
75            printf("[009] [%d] %s\n", $stmt->errno, $stmt->error);
76
77        if (!$res = $stmt->get_result())
78            printf("[010] [%d] %s\n", $stmt->errno, $stmt->error);
79
80        $tmp = mysqli_fetch_assoc($res);
81        if (empty($tmp))
82            printf("[011] Empty EXPLAIN result set seems wrong, check manually, [%d] %s\n",
83                mysqli_errno($link), mysqli_error($link));
84        mysqli_free_result($res);
85    }
86    mysqli_close($link);
87
88    print "done!";
89?>
90--CLEAN--
91<?php
92    require_once("clean_table.inc");
93?>
94--EXPECT--
95done!
96