1--TEST--
2mysqli_more_results()
3--SKIPIF--
4<?php
5require_once('skipif.inc');
6require_once('skipifemb.inc');
7require_once('skipifconnectfailure.inc');
8?>
9--FILE--
10<?php
11	require_once("connect.inc");
12
13	$strict_on = false;
14	if (defined('E_STRICT')) {
15		error_reporting(((int)ini_get('error_reporting')) | E_STRICT );
16		$strict_on = true;
17	}
18
19	$tmp    = NULL;
20	$link   = NULL;
21
22	if (!is_null($tmp = @mysqli_more_results()))
23		printf("[001] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
24
25	if (!is_null($tmp = @mysqli_more_results($link)))
26		printf("[002] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
27
28	require('table.inc');
29
30	print "[004]\n";
31	var_dump(mysqli_more_results($link));
32
33	if (!mysqli_multi_query($link, "SELECT 1 AS a; SELECT 1 AS a, 2 AS b; SELECT id FROM test ORDER BY id LIMIT 3"))
34		printf("[005] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
35	print "[006]\n";
36	$i = 1;
37
38	if ($strict_on)
39		ob_start();
40
41	if (mysqli_get_server_version($link) > 41000 && !($ret = mysqli_more_results($link)))
42		printf("[007] Expecting boolean/true, got %s/%s\n", gettype($ret), $ret);
43	do {
44		$res = mysqli_store_result($link);
45		mysqli_free_result($res);
46		if (mysqli_more_results($link))
47			printf("%d\n", $i++);
48	} while (mysqli_next_result($link));
49
50	if ($strict_on) {
51		$tmp = ob_get_contents();
52		ob_end_clean();
53		if (!preg_match('@Strict Standards: mysqli_next_result\(\): There is no next result set@ismU', $tmp)) {
54			printf("[008] Strict Standards warning missing\n");
55		} else {
56			$tmp = trim(preg_replace('@Strict Standards: mysqli_next_result\(\).*on line \d+@ism', '', $tmp));
57		}
58			print trim($tmp) . "\n";
59	}
60
61	if (!mysqli_multi_query($link, "SELECT 1 AS a; SELECT 1 AS a, 2 AS b; SELECT id FROM test ORDER BY id LIMIT 3"))
62		printf("[009] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
63	print "[010]\n";
64	$i = 1;
65	if (mysqli_get_server_version($link) > 41000 && !($ret = mysqli_more_results($link)))
66		printf("[011] Expecting boolean/true, got %s/%s\n", gettype($ret), $ret);
67
68	if ($strict_on)
69		ob_start();
70	do {
71		$res = mysqli_use_result($link);
72		// NOTE: if you use mysqli_use_result() with mysqli_more_results() or any other info function,
73		// you must fetch all rows before you can loop to the next result set!
74		// See also the MySQL Reference Manual: mysql_use_result()
75		while ($row = mysqli_fetch_array($res))
76			;
77		mysqli_free_result($res);
78		if (mysqli_more_results($link))
79			printf("%d\n", $i++);
80	} while (mysqli_next_result($link));
81
82	if ($strict_on) {
83		$tmp = ob_get_contents();
84		ob_end_clean();
85		if (!preg_match('@Strict Standards: mysqli_next_result\(\): There is no next result set@ismU', $tmp)) {
86			printf("[008] Strict Standards warning missing\n");
87		} else {
88			$tmp = trim(preg_replace('@Strict Standards: mysqli_next_result\(\).*on line \d+@ism', '', $tmp));
89		}
90		print trim($tmp) . "\n";
91	}
92	mysqli_close($link);
93
94	var_dump(mysqli_more_results($link));
95
96	print "done!";
97?>
98--CLEAN--
99<?php
100	require_once("clean_table.inc");
101?>
102--EXPECTF--
103[004]
104bool(false)
105[006]
1061
1072
108[010]
1091
1102
111
112Warning: mysqli_more_results(): Couldn't fetch mysqli in %s on line %d
113NULL
114done!