1--TEST--
2mysqli_stmt_execute()
3--SKIPIF--
4<?php
5require_once('skipif.inc');
6require_once('skipifemb.inc');
7require_once('skipifconnectfailure.inc');
8if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) {
9	die(sprintf('skip Cannot connect to MySQL, [%d] %s.', mysqli_connect_errno(), mysqli_connect_error()));
10}
11if (mysqli_get_server_version($link) <= 40100) {
12	die(sprintf('skip Needs MySQL 4.1+, found version %d.', mysqli_get_server_version($link)));
13}
14?>
15--FILE--
16<?php
17	require_once("connect.inc");
18
19	$tmp    = NULL;
20	$link   = NULL;
21
22	if (!is_null($tmp = @mysqli_stmt_execute()))
23		printf("[001] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
24
25	if (!is_null($tmp = @mysqli_stmt_execute($link)))
26		printf("[002] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
27
28	require('table.inc');
29
30	if (!$stmt = mysqli_stmt_init($link))
31		printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
32
33	// stmt object status test
34	if (NULL !== ($tmp = mysqli_stmt_execute($stmt)))
35		printf("[004] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
36
37	if (mysqli_stmt_prepare($stmt, "SELECT i_do_not_exist_believe_me FROM test ORDER BY id"))
38		printf("[005] Statement should have failed!\n");
39
40	// stmt object status test
41	if (NULL !== ($tmp = mysqli_stmt_execute($stmt)))
42		printf("[006] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
43
44	if (!mysqli_stmt_prepare($stmt, "SELECT id FROM test ORDER BY id LIMIT 1"))
45		printf("[007] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
46
47	if (true !== ($tmp = mysqli_stmt_execute($stmt)))
48		printf("[008] Expecting boolean/true, got %s/%s. [%d] %s\n",
49			gettype($tmp), $tmp, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
50
51	if (!mysqli_stmt_prepare($stmt, "INSERT INTO test(id, label) VALUES (?, ?)"))
52		printf("[009] [%d] %s\n", mysqli_stmt_execute($stmt), mysqli_stmt_execute($stmt));
53
54	// no input variables bound
55	if (false !== ($tmp = mysqli_stmt_execute($stmt)))
56		printf("[010] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
57
58	$id = 100;
59	$label = "z";
60	if (!mysqli_stmt_bind_param($stmt, "is", $id, $label))
61		printf("[011] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
62
63	if (true !== ($tmp = mysqli_stmt_execute($stmt)))
64		printf("[012] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
65
66	// calling reset between executions
67	mysqli_stmt_close($stmt);
68	if (!$stmt = mysqli_stmt_init($link))
69		printf("[013] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
70
71	if (!mysqli_stmt_prepare($stmt, "SELECT id FROM test ORDER BY id LIMIT ?"))
72		printf("[014] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
73
74	$limit = 1;
75	if (!mysqli_stmt_bind_param($stmt, "i", $limit))
76		printf("[015] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
77
78	if (true !== ($tmp = mysqli_stmt_execute($stmt)))
79		printf("[016] Expecting boolean/true, got %s/%s. [%d] %s\n",
80			gettype($tmp), $tmp, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
81
82	$id = null;
83	if (!mysqli_stmt_bind_result($stmt, $id) || !mysqli_stmt_fetch($stmt))
84		printf("[017] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
85
86	if ($id !== 1)
87		printf("[018] Expecting int/1 got %s/%s\n", gettype($id), $id);
88
89	if (true !== ($tmp = mysqli_stmt_reset($stmt)))
90		printf("[019] Expecting boolean/true, got %s/%s. [%d] %s\n",
91			gettype($tmp), $tmp, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
92
93	if (true !== ($tmp = mysqli_stmt_execute($stmt)))
94		printf("[020] Expecting boolean/true after reset to prepare status, got %s/%s. [%d] %s\n",
95			gettype($tmp), $tmp, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
96
97	$id = null;
98	if (!mysqli_stmt_fetch($stmt))
99		printf("[021] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
100
101	if ($id !== 1)
102		printf("[022] Expecting int/1 got %s/%s\n", gettype($id), $id);
103
104	mysqli_stmt_close($stmt);
105	if (!$stmt = mysqli_stmt_init($link))
106		printf("[023] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
107
108	if (!mysqli_stmt_prepare($stmt, "SELECT id FROM test ORDER BY id LIMIT 1"))
109		printf("[024] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
110
111	if (true !== ($tmp = mysqli_stmt_execute($stmt)))
112		printf("[025] Expecting boolean/true, got %s/%s. [%d] %s\n",
113			gettype($tmp), $tmp, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
114
115	if (true !== ($tmp = mysqli_stmt_reset($stmt)))
116		printf("[026] Expecting boolean/true, got %s/%s. [%d] %s\n",
117			gettype($tmp), $tmp, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
118
119	var_dump(mysqli_stmt_execute($stmt));
120	var_dump(mysqli_stmt_fetch($stmt));
121
122	mysqli_kill($link, mysqli_thread_id($link));
123
124	if (false !== ($tmp = mysqli_stmt_execute($stmt)))
125		printf("[027] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
126
127	mysqli_stmt_close($stmt);
128
129	if (NULL !== ($tmp = mysqli_stmt_execute($stmt)))
130		printf("[028] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
131
132	mysqli_close($link);
133	print "done!";
134?>
135--CLEAN--
136<?php
137	require_once("clean_table.inc");
138?>
139--EXPECTF--
140Warning: mysqli_stmt_execute(): invalid object or resource mysqli_stmt
141 in %s on line %d
142
143Warning: mysqli_stmt_execute(): invalid object or resource mysqli_stmt
144 in %s on line %d
145bool(true)
146bool(true)
147[027] Expecting boolean/false, got boolean/1
148
149Warning: mysqli_stmt_execute(): Couldn't fetch mysqli_stmt in %s on line %d
150done!