xref: /PHP-8.3/ext/mysqli/tests/bug35103.phpt (revision a21edc52)
1--TEST--
2Bug #35103 (Bad handling of unsigned bigint)
3--EXTENSIONS--
4mysqli
5--SKIPIF--
6<?php
7require_once 'skipifconnectfailure.inc';
8?>
9--FILE--
10<?php
11
12$drop = <<<EOSQL
13DROP TABLE test_bint;
14DROP TABLE test_buint;
15EOSQL;
16    require_once 'connect.inc';
17
18    $mysql = new my_mysqli($host, $user, $passwd, $db, $port, $socket);
19    $mysql->query("DROP TABLE IF EXISTS test_bint");
20    $mysql->query("CREATE TABLE test_bint (a bigint(20) default NULL) ENGINE=MYISAM");
21    $mysql->query("INSERT INTO test_bint VALUES (9223372036854775807),(-9223372036854775808),(-2147483648),(-2147483649),(-2147483647),(2147483647),(2147483648),(2147483649)");
22
23    $mysql->query("DROP TABLE IF EXISTS test_buint");
24    $mysql->query("CREATE TABLE test_buint (a bigint(20) unsigned default NULL)");
25    $mysql->query("INSERT INTO test_buint VALUES (18446744073709551615),(9223372036854775807),(9223372036854775808),(2147483647),(2147483649),(4294967295)");
26
27    $stmt = $mysql->prepare("SELECT a FROM test_bint ORDER BY a");
28    $stmt->bind_result($v);
29    $stmt->execute();
30    $i=0;
31    echo "BIG INT SIGNED, TEST\n";
32    while ($i++ < 8) {
33        $stmt->fetch();
34        echo $v, "\n";
35    }
36    $stmt->close();
37
38    echo str_repeat("-", 20), "\n";
39
40    $stmt = $mysql->prepare("SELECT a FROM test_buint ORDER BY a");
41    $stmt->bind_result($v2);
42    $stmt->execute();
43    $j=0;
44    echo "BIG INT UNSIGNED TEST\n";
45    while ($j++ < 6) {
46        $stmt->fetch();
47        echo $v2, "\n";
48    }
49    $stmt->close();
50
51    $mysql->multi_query($drop);
52
53    $mysql->close();
54?>
55--CLEAN--
56<?php
57require_once 'connect.inc';
58if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
59   printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
60
61if (!mysqli_query($link, "DROP TABLE IF EXISTS test_bint") || !mysqli_query($link, "DROP TABLE IF EXISTS test_buint"))
62    printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
63
64mysqli_close($link);
65?>
66--EXPECT--
67BIG INT SIGNED, TEST
68-9223372036854775808
69-2147483649
70-2147483648
71-2147483647
722147483647
732147483648
742147483649
759223372036854775807
76--------------------
77BIG INT UNSIGNED TEST
782147483647
792147483649
804294967295
819223372036854775807
829223372036854775808
8318446744073709551615
84