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>