1--TEST--
2mysqli_stmt_get_result()
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_once("connect.inc");
20
21	$tmp	= NULL;
22	$link   = NULL;
23
24	if (!is_null($tmp = @mysqli_stmt_get_result()))
25		printf("[001] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
26
27	if (!is_null($tmp = @mysqli_stmt_get_result($link)))
28		printf("[002] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
29
30	require('table.inc');
31
32	if (!$stmt = mysqli_stmt_init($link))
33		printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
34
35	// stmt object status test
36	if (NULL !== ($tmp = mysqli_stmt_fetch($stmt)))
37		printf("[004] Expecting NULL, got %s/%s\n", gettype($tmp), var_export($tmp, 1));
38
39	if (!mysqli_stmt_prepare($stmt, "SELECT id, label FROM test ORDER BY id LIMIT 2"))
40		printf("[005] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
41
42	// FIXME - different versions return different values ?!
43	if ((NULL !== ($tmp = mysqli_stmt_get_result($stmt))) && (false !== $tmp))
44		printf("[006] Expecting NULL or boolean/false, got %s/%s\n", gettype($tmp), var_export($tmp, 1));
45
46	if (!mysqli_stmt_execute($stmt))
47		printf("[007] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
48
49	if (!mysqli_stmt_store_result($stmt))
50		printf("[008] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
51
52	if (is_object($tmp = mysqli_stmt_store_result($stmt)))
53		printf("[009] non-object, got %s/%s\n", gettype($tmp), var_export($tmp, 1));
54
55	mysqli_stmt_close($stmt);
56
57	if (!$stmt = mysqli_stmt_init($link))
58		printf("[010] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
59
60	// stmt object status test
61	if (NULL !== ($tmp = mysqli_stmt_fetch($stmt)))
62		printf("[011] Expecting NULL, got %s/%s\n", gettype($tmp), var_export($tmp, 1));
63
64	if (!mysqli_stmt_prepare($stmt, "SELECT id, label FROM test ORDER BY id LIMIT 2"))
65		printf("[012] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
66
67	// FIXME - different versions return different values ?!
68	if ((NULL !== ($tmp = mysqli_stmt_get_result($stmt))) && (false !== $tmp))
69		printf("[013] Expecting NULL or boolean/false, got %s/%s\n", gettype($tmp), var_export($tmp, 1));
70
71	if (!mysqli_stmt_execute($stmt))
72		printf("[014] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
73
74	if (!is_object($tmp = mysqli_stmt_get_result($stmt)))
75		printf("[016] NULL, got %s/%s\n", gettype($tmp), var_export($tmp, 1));
76
77	mysqli_free_result($tmp);
78	mysqli_stmt_close($stmt);
79
80	if (!$stmt = mysqli_stmt_init($link))
81		printf("[017] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
82
83	// stmt object status test
84	if (NULL !== ($tmp = mysqli_stmt_get_result($stmt)))
85		printf("[018] Expecting NULL, got %s/%s\n", gettype($tmp), var_export($tmp, 1));
86
87	if (!mysqli_stmt_prepare($stmt, "SELECT id, label FROM test ORDER BY id LIMIT 2"))
88		printf("[019] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
89
90	if (false !== ($tmp = mysqli_stmt_get_result($stmt)))
91		printf("[020] Expecting false, got %s/%s\n", gettype($tmp), var_export($tmp, 1));
92
93	if (!mysqli_stmt_execute($stmt))
94		printf("[023] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
95
96	if (!is_object($tmp = mysqli_stmt_get_result($stmt)))
97		printf("[024] Expecting object, got %s/%s\n", gettype($tmp), var_export($tmp, 1));
98
99	if (false !== ($tmp = mysqli_stmt_fetch($stmt)))
100		printf("[025] false, got %s/%s\n", gettype($tmp), var_export($tmp, 1));
101
102	if (true !== ($tmp = mysqli_stmt_bind_result($stmt, $id, $label))) {
103		printf("[026] [%d] [%s]\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
104		printf("[027] [%d] [%s]\n", mysqli_errno($link), mysqli_error($link));
105		printf("[028] Expecting boolean/true, got %s/%s\n", gettype($tmp), var_export($tmp, 1));
106	}
107
108	if (false !== ($tmp = mysqli_stmt_fetch($stmt)))
109		printf("[029] false, got %s/%s\n", gettype($tmp), var_export($tmp, 1));
110
111	mysqli_stmt_close($stmt);
112
113	if (!$stmt = mysqli_stmt_init($link))
114		printf("[032] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
115
116	if (!mysqli_stmt_prepare($stmt, "SELECT id, label FROM test ORDER BY id LIMIT 2"))
117		printf("[033] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
118
119	if (!mysqli_stmt_execute($stmt))
120		printf("[034] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
121
122	$id = NULL;
123	$label = NULL;
124	if (true !== ($tmp = mysqli_stmt_bind_result($stmt, $id, $label)))
125		printf("[035] Expecting boolean/true, got %s/%s\n", gettype($tmp), var_export($tmp, 1));
126
127	if (!is_object($tmp = $result = mysqli_stmt_get_result($stmt)))
128		printf("[036] Expecting array, got %s/%s, [%d] %s\n",
129			gettype($tmp), var_export($tmp, 1),
130			mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
131
132	if (false !== ($tmp = mysqli_stmt_fetch($stmt)))
133		printf("[037] Expecting boolean/false, got %s/%s, [%d] %s\n",
134			gettype($tmp), $tmp, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
135
136	printf("[038] [%d] [%s]\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
137	printf("[039] [%d] [%s]\n", mysqli_errno($link), mysqli_error($link));
138	while ($row = mysqli_fetch_assoc($result)) {
139		var_dump($row);
140	}
141	mysqli_free_result($result);
142
143	if (!mysqli_kill($link, mysqli_thread_id($link)))
144		printf("[040] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
145
146	if (false !== ($tmp = mysqli_stmt_get_result($stmt)))
147		printf("[041] Expecting false, got %s/%s\n", gettype($tmp), var_export($tmp, 1));
148
149	mysqli_stmt_close($stmt);
150
151	if (NULL !== ($tmp = mysqli_stmt_fetch($stmt)))
152		printf("[042] Expecting NULL, got %s/%s\n", gettype($tmp), var_export($tmp, 1));
153
154	mysqli_close($link);
155
156	print "done!";
157?>
158--CLEAN--
159<?php
160	require_once("clean_table.inc");
161?>
162--EXPECTF--
163Warning: mysqli_stmt_fetch(): invalid object or resource mysqli_stmt
164 in %s on line %d
165
166Warning: mysqli_stmt_fetch(): invalid object or resource mysqli_stmt
167 in %s on line %d
168
169Warning: mysqli_stmt_get_result(): invalid object or resource mysqli_stmt
170 in %s on line %d
171[038] [2014] [Commands out of sync; you can't run this command now]
172[039] [0] []
173array(2) {
174  [%u|b%"id"]=>
175  int(1)
176  [%u|b%"label"]=>
177  %s(1) "a"
178}
179array(2) {
180  [%u|b%"id"]=>
181  int(2)
182  [%u|b%"label"]=>
183  %s(1) "b"
184}
185
186Warning: mysqli_stmt_fetch(): Couldn't fetch mysqli_stmt in %s on line %d
187done!