Annotation of embedaddon/php/ext/mysqli/tests/mysqli_stmt_bind_result_zerofill.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: mysqli_stmt_bind_result() - ZEROFILL
3: --SKIPIF--
4: <?php
5: require_once('skipif.inc');
6: require_once('skipifemb.inc');
7: require_once('skipifconnectfailure.inc');
8: ?>
9: --FILE--
10: <?php
11: require_once('connect.inc');
12: require_once('table.inc');
13:
14: function zerofill($offset, $link, $datatype, $insert = 1) {
15:
16: mysqli_query($link, 'ALTER TABLE test DROP zero');
17: $sql = sprintf('ALTER TABLE test ADD zero %s UNSIGNED ZEROFILL', $datatype);
18: if (!mysqli_query($link, $sql)) {
19: // no worries - server might not support it
20: return true;
21: }
22:
23: if (!mysqli_query($link, sprintf('UPDATE test SET zero = %s', $insert))) {
24: printf("[%03d] UPDATE failed, [%d] %s\n",
25: $offset, mysqli_errno($link), mysqli_error($link));
26: return false;
27: }
28:
29: if (!($stmt = mysqli_prepare($link, 'SELECT zero FROM test LIMIT 1'))) {
30: printf("[%03d] SELECT failed, [%d] %s\n",
31: $offset, mysqli_errno($link), mysqli_error($link));
32: return false;
33: }
34:
35: $result = null;
36: if (!mysqli_stmt_bind_result($stmt, $result)) {
37: printf("[%03d] Bind failed, [%d] %s\n",
38: mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
39: return false;
40: }
41:
42: if (!mysqli_stmt_execute($stmt) || !mysqli_stmt_fetch($stmt)) {
43: printf("[%03d] Execute or fetch failed, [%d] %s\n",
44: mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
45: return false;
46: }
47:
48: $res = mysqli_stmt_result_metadata($stmt);
49: $meta = mysqli_fetch_fields($res);
50: mysqli_stmt_free_result($stmt);
51:
52: $meta = $meta[0];
53: $length = $meta->length;
54: if ($length > strlen($insert)) {
55:
56: $expected = str_repeat('0', $length - strlen($insert));
57: $expected .= $insert;
58: if ($expected !== $result) {
59: printf("[%03d] Expecting '%s' got '%s'\n", $offset, $expected, $result);
60: return false;
61: }
62:
63: } else if ($length <= 1) {
64: printf("[%03d] Length reported is too small to run test\n", $offset);
65: return false;
66: }
67:
68:
69: return true;
70: }
71:
72: /*
73: We map those to PHP numeric types -
74: no padding/filling done. Neither with libmysql nor with mysqlnd.
75: zerofill(2, $link, 'TINYINT');
76: zerofill(3, $link, 'SMALLINT');
77: zerofill(4, $link, 'MEDIUMINT');
78: zerofill(5, $link, 'INT');
79: zerofill(6, $link, 'INTEGER');
80: zerofill(7, $link, 'BIGINT');
81: zerofill(8, $link, 'FLOAT');
82: zerofill(9, $link, 'DOUBLE');
83: zerofill(10, $link, 'DOUBLE PRECISION');
84: */
85: zerofill(11, $link, 'DECIMAL');
86: zerofill(12, $link, 'DEC');
87:
88: mysqli_close($link);
89:
90: print "done!";
91: ?>
92: --CLEAN--
93: <?php
94: require_once("clean_table.inc");
95: ?>
96: --EXPECTF--
97: done!
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>