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 (false !== ($tmp = mysqli_stmt_execute($stmt)))
35        printf("[004] Expecting false, 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 (false !== ($tmp = mysqli_stmt_execute($stmt)))
42        printf("[006] Expecting false, 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 (false !== ($tmp = mysqli_stmt_execute($stmt)))
130        printf("[028] Expecting false, 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!
151