1--TEST--
2mysqli_multi_query()
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    $tmp    = NULL;
14    $link   = NULL;
15
16    if (!is_null($tmp = @mysqli_multi_query()))
17        printf("[001] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
18
19    if (!is_null($tmp = @mysqli_multi_query($link)))
20        printf("[002] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
21
22    require('table.inc');
23
24    if (false !== ($tmp = mysqli_multi_query($link, "")))
25        printf("[003] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
26
27    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"))
28        printf("[005] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
29
30    $i = 0;
31    do {
32        $res = mysqli_store_result($link);
33        while ($row = mysqli_fetch_array($res))
34            ;
35        mysqli_free_result($res);
36        $i++;
37    } while (mysqli_next_result($link));
38
39    printf("[006] %d\n", $i);
40
41    if (!mysqli_multi_query($link, "ALTER TABLE test MODIFY id INT AUTO_INCREMENT; INSERT INTO test(label) VALUES ('a'); SELECT id, label FROM test ORDER BY id"))
42        printf("[007] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
43
44    $i = 0;
45    while (mysqli_next_result($link) && ($res = mysqli_store_result($link))) {
46
47        while ($row = mysqli_fetch_array($res))
48            ;
49        mysqli_free_result($res);
50        printf("%d/%d\n", $i, mysqli_insert_id($link));
51        $i++;
52    }
53    printf("[008] %d\n", $i);
54
55    if (!mysqli_multi_query($link, "SELECT id, label FROM test"))
56        printf("[009] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
57
58    $i = 0;
59    while (mysqli_next_result($link) && ($res = mysqli_store_result($link))) {
60        while ($row = mysqli_fetch_array($res))
61            $i++;
62        mysqli_free_result($res);
63    }
64    printf("[010] %d\n", $i);
65
66    if (!mysqli_multi_query($link, "SELECT 1 AS num, 'a' AS somechar; SELECT 2 AS num, 'a' AS somechar; SELECT 3 AS num, 'a' AS somechar"))
67        printf("[011] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
68
69    $res_num = 1;
70    do {
71        if (!$res = mysqli_store_result($link)) {
72            printf("[012 - %d] [%d] %s\n", $res_num, mysqli_errno($link), mysqli_error($link));
73            continue;
74        }
75
76        $num_rows = 0;
77        while ($row = mysqli_fetch_array($res)) {
78
79            $num_rows++;
80            if ($row['num'] != $res_num)
81                printf("[013 - %d] Expecting %s got %s\n", $res_num, $res_num, $row['num']);
82            if ($row['somechar'] != "a")
83                printf("[014 - %d] Expecting a got %s\n", $res_num, $row['somechar']);
84
85            if (1 == $num_rows) {
86                /* simple metadata check */
87                if (!($lengths = mysqli_fetch_lengths($res)))
88                    printf("[015 - %d] [%d] %s\n", $res_num, mysqli_errno($link), mysqli_error($link));
89
90                if (count($lengths) != 2)
91                    printf("[016 - %d] Expecting 2 column lengths got %d [%d] %s\n", $res_num, count($lengths));
92
93                foreach ($lengths as $k => $length)
94                    if ($length <= 0)
95                        printf("[017 - %d] Strange column lengths for column %d, got %d expecting any > 0\n",
96                            $res_num, $k, $length);
97                }
98        }
99
100        if ($num_rows != 1)
101            printf("[018 - %d] Expecting 1 row, got %d rows\n", $num_rows);
102
103        $res_num++;
104
105        mysqli_free_result($res);
106
107    } while (mysqli_next_result($link));
108
109    if ($res_num != 4)
110        printf("[015] Expecting 3 result sets got %d result set[s]\n", $res_num);
111
112    mysqli_close($link);
113
114    var_dump(mysqli_multi_query($link, "SELECT id, label FROM test"));
115
116    print "done!";
117?>
118--CLEAN--
119<?php
120    require_once("clean_table.inc");
121?>
122--EXPECTF--
123[006] 3
124[008] 0
125[009] [2014] Commands out of sync; you can't run this command now
126[010] 7
127
128Warning: mysqli_multi_query(): Couldn't fetch mysqli in %s on line %d
129bool(false)
130done!
131