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('MyISAM', $v)) {
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--EXPECTF--
95done!