Annotation of embedaddon/php/ext/pdo_mysql/tests/pdo_mysql_stmt_bindparam_types.phpt, revision 1.1.1.1

1.1       misho       1: --TEST--
                      2: MySQL PDOStatement->bindParam() - SQL column types
                      3: --SKIPIF--
                      4: <?php
                      5: require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'skipif.inc');
                      6: require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
                      7: MySQLPDOTest::skip();
                      8: $db = MySQLPDOTest::factory();
                      9: ?>
                     10: --FILE--
                     11: <?php
                     12:        require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
                     13:        $db = MySQLPDOTest::factory();
                     14:        MySQLPDOTest::createTestTable($db);
                     15: 
                     16:        function pdo_mysql_stmt_bindparam_types_do($db, $offset, $native, $sql_type, $value) {
                     17: 
                     18:                        if ($native)
                     19:                                $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0);
                     20:                        else
                     21:                                $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1);
                     22: 
                     23:                        $db->exec('DROP TABLE IF EXISTS test');
                     24:                        $sql = sprintf('CREATE TABLE test(id INT, label %s) ENGINE=%s', $sql_type, MySQLPDOTest::getTableEngine());
                     25:                        if ((!$stmt = @$db->prepare($sql)) || (!@$stmt->execute()))
                     26:                                // Server might not support column type - skip it
                     27:                                return true;
                     28: 
                     29:                        $stmt = $db->prepare('INSERT INTO test(id, label) VALUES (1, ?)');
                     30:                        if (!$stmt->bindParam(1, $value)) {
                     31:                                printf("[%03d/%s + 1] %s\n", $offset, ($native) ? 'native' : 'emulated',
                     32:                                        var_export($stmt->errorInfo(), true));
                     33:                                return false;
                     34:                        }
                     35:                        if (!$stmt->execute()) {
                     36:                                printf("[%03d/%s + 2] %s\n", $offset, ($native) ? 'native' : 'emulated',
                     37:                                        var_export($stmt->errorInfo(), true));
                     38:                                return false;
                     39:                        }
                     40: 
                     41:                        $stmt = $db->query('SELECT id, label FROM test');
                     42:                        $id = $label = null;
                     43:                        if (!$stmt->bindColumn(1, $id)) {
                     44:                                printf("[%03d/%s + 3] %s\n", $offset, ($native) ? 'native' : 'emulated',
                     45:                                        var_export($stmt->errorInfo(), true));
                     46:                                return false;
                     47:                        }
                     48:                        if (!$stmt->bindColumn(2, $label)) {
                     49:                                printf("[%03d/%s + 4] %s\n", $offset, ($native) ? 'native' : 'emulated',
                     50:                                        var_export($stmt->errorInfo(), true));
                     51:                                return false;
                     52:                        }
                     53: 
                     54:                        if (!$stmt->fetch(PDO::FETCH_BOUND)) {
                     55:                                printf("[%03d/%s + 5] %s\n", $offset, ($native) ? 'native' : 'emulated',
                     56:                                        var_export($stmt->errorInfo(), true));
                     57:                                return false;
                     58:                        }
                     59:                        $stmt->closeCursor();
                     60: 
                     61:                        if ($label != $value) {
                     62:                                printf("[%03d/%s + 6] Got %s expecting %s - plase check manually\n",
                     63:                                        $offset, ($native) ? 'native' : 'emulated',
                     64:                                        var_export($label, true), var_export($value, true));
                     65:                                // fall through
                     66:                        }
                     67: 
                     68:                        $stmt->execute();
                     69:                        $row = $stmt->fetch(PDO::FETCH_ASSOC);
                     70:                        if (empty($row)) {
                     71:                                printf("[%03d/%s + 7] %s\n", $offset, ($native) ? 'native' : 'emulated',
                     72:                                        var_export($stmt->errorInfo(), true));
                     73:                                return false;
                     74:                        }
                     75: 
                     76:                        if ($row['label'] != $value) {
                     77:                                printf("[%03d/%s + 8] Got %s expecting %s - plase check manually\n",
                     78:                                        $offset, ($native) ? 'native' : 'emulated',
                     79:                                        var_export($row['label'], true), var_export($value, true));
                     80:                                return false;
                     81:                        }
                     82: 
                     83:                        if ($row['label'] != $label) {
                     84:                                printf("[%03d/%s + 9] Got %s from FETCH_ASSOC and %s from FETCH_BOUND- plase check manually\n",
                     85:                                        $offset, ($native) ? 'native' : 'emulated',
                     86:                                        var_export($row['label'], true), var_export($value, true));
                     87:                                return false;
                     88:                        }
                     89: 
                     90:                        $db->exec('DROP TABLE IF EXISTS test');
                     91:                        return true;
                     92:        }
                     93: 
                     94:        function pdo_mysql_stmt_bindparam_types($db, $offset, $sql_type, $value) {
                     95: 
                     96:                pdo_mysql_stmt_bindparam_types_do($db, $offset, true, $sql_type, $value);
                     97:                pdo_mysql_stmt_bindparam_types_do($db, $offset, false, $sql_type, $value);
                     98: 
                     99:        }
                    100: 
                    101:        try {
                    102: 
                    103:                // pdo_mysql_stmt_bindparam_types($db, 2, 'BIT(8)', 1);
                    104:                pdo_mysql_stmt_bindparam_types($db, 3, 'TINYINT', -127);
                    105:                pdo_mysql_stmt_bindparam_types($db, 4, 'TINYINT UNSIGNED', 255);
                    106:                pdo_mysql_stmt_bindparam_types($db, 5, 'BOOLEAN', 1);
                    107:                pdo_mysql_stmt_bindparam_types($db, 6, 'SMALLINT', -32768);
                    108:                pdo_mysql_stmt_bindparam_types($db, 7, 'SMALLINT UNSIGNED', 65535);
                    109:                pdo_mysql_stmt_bindparam_types($db, 8, 'MEDIUMINT', -8388608);
                    110:                pdo_mysql_stmt_bindparam_types($db, 9, 'MEDIUMINT UNSIGNED', 16777215);
                    111:                pdo_mysql_stmt_bindparam_types($db, 10, 'INT', -2147483648);
                    112:                pdo_mysql_stmt_bindparam_types($db, 11, 'INT UNSIGNED', 4294967295);
                    113:                pdo_mysql_stmt_bindparam_types($db, 12, 'BIGINT',  -1000);
                    114:                pdo_mysql_stmt_bindparam_types($db, 13, 'BIGINT UNSIGNED', 1000);
                    115:                pdo_mysql_stmt_bindparam_types($db, 14, 'REAL', -1000);
                    116:                pdo_mysql_stmt_bindparam_types($db, 15, 'REAL UNSIGNED', 1000);
                    117:                pdo_mysql_stmt_bindparam_types($db, 16, 'REAL ZEROFILL', '0000000000000000000000');
                    118:                pdo_mysql_stmt_bindparam_types($db, 17, 'REAL UNSIGNED ZEROFILL', '0000000000000000000010');
                    119:                pdo_mysql_stmt_bindparam_types($db, 18, 'DOUBLE', -1000);
                    120:                pdo_mysql_stmt_bindparam_types($db, 19, 'DOUBLE UNSIGNED', 1000);
                    121:                pdo_mysql_stmt_bindparam_types($db, 20, 'DOUBLE ZEROFILL', '000000000000');
                    122:                pdo_mysql_stmt_bindparam_types($db, 21, 'DOUBLE ZEROFILL UNSIGNED', '000000001000');
                    123:                pdo_mysql_stmt_bindparam_types($db, 22, 'FLOAT', -1000);
                    124:                pdo_mysql_stmt_bindparam_types($db, 23, 'FLOAT UNSIGNED', 1000);
                    125:                pdo_mysql_stmt_bindparam_types($db, 24, 'FLOAT ZEROFILL', '000000000000');
                    126:                pdo_mysql_stmt_bindparam_types($db, 25, 'FLOAT ZEROFILL UNSIGNED', '000000001000');
                    127:                pdo_mysql_stmt_bindparam_types($db, 26, 'DECIMAL', -1000);
                    128:                pdo_mysql_stmt_bindparam_types($db, 27, 'DECIMAL UNSIGNED', 1000);
                    129:                pdo_mysql_stmt_bindparam_types($db, 28, 'DECIMAL ZEROFILL', '000000000000');
                    130:                pdo_mysql_stmt_bindparam_types($db, 29, 'DECIMAL ZEROFILL UNSIGNED', '000000001000');
                    131:                pdo_mysql_stmt_bindparam_types($db, 30, 'NUMERIC', -1000);
                    132:                pdo_mysql_stmt_bindparam_types($db, 31, 'NUMERIC UNSIGNED', 1000);
                    133:                pdo_mysql_stmt_bindparam_types($db, 32, 'NUMERIC ZEROFILL', '000000000000');
                    134:                pdo_mysql_stmt_bindparam_types($db, 33, 'NUMERIC ZEROFILL UNSIGNED', '000000001000');
                    135:                pdo_mysql_stmt_bindparam_types($db, 34, 'DATE', '2008-04-23');
                    136:                pdo_mysql_stmt_bindparam_types($db, 35, 'TIME', '16:43:12');
                    137:                pdo_mysql_stmt_bindparam_types($db, 36, 'TIMESTAMP', '2008-04-23 16:44:53');
                    138:                pdo_mysql_stmt_bindparam_types($db, 37, 'DATETIME', '2008-04-23 16:44:53');
                    139:                pdo_mysql_stmt_bindparam_types($db, 38, 'YEAR', '2008');
                    140:                pdo_mysql_stmt_bindparam_types($db, 39, 'CHAR(1)', 'a');
                    141:                pdo_mysql_stmt_bindparam_types($db, 40, 'CHAR(255)', 'abc');
                    142:                pdo_mysql_stmt_bindparam_types($db, 41, 'VARCHAR(255)', str_repeat('a', 255));
                    143:                pdo_mysql_stmt_bindparam_types($db, 42, 'BINARY(255)', str_repeat('a', 255));
                    144:                pdo_mysql_stmt_bindparam_types($db, 43, 'VARBINARY(255)', str_repeat('a', 255));
                    145:                pdo_mysql_stmt_bindparam_types($db, 44, 'TINYBLOB', str_repeat('a', 255));
                    146:                pdo_mysql_stmt_bindparam_types($db, 45, 'BLOB', str_repeat('b', 300));
                    147:                pdo_mysql_stmt_bindparam_types($db, 46, 'MEDIUMBLOB', str_repeat('b', 300));
                    148:                pdo_mysql_stmt_bindparam_types($db, 47, 'LONGBLOB', str_repeat('b', 300));
                    149:                pdo_mysql_stmt_bindparam_types($db, 48, 'TINYTEXT', str_repeat('c', 255));
                    150:                pdo_mysql_stmt_bindparam_types($db, 49, 'TINYTEXT BINARY', str_repeat('c', 255));
                    151:                pdo_mysql_stmt_bindparam_types($db, 50, 'TEXT', str_repeat('d', 300));
                    152:                pdo_mysql_stmt_bindparam_types($db, 51, 'TEXT BINARY', str_repeat('d', 300));
                    153:                pdo_mysql_stmt_bindparam_types($db, 52, 'MEDIUMTEXT', str_repeat('d', 300));
                    154:                pdo_mysql_stmt_bindparam_types($db, 53, 'MEDIUMTEXT BINARY', str_repeat('d', 300));
                    155:                pdo_mysql_stmt_bindparam_types($db, 54, 'LONGTEXT', str_repeat('d', 300));
                    156:                pdo_mysql_stmt_bindparam_types($db, 55, 'LONGTEXT BINARY', str_repeat('d', 300));
                    157:                pdo_mysql_stmt_bindparam_types($db, 56, "ENUM('yes', 'no') DEFAULT 'yes'", "no");
                    158:                pdo_mysql_stmt_bindparam_types($db, 57, "SET('yes', 'no') DEFAULT 'yes'", "no");
                    159: 
                    160:        } catch (PDOException $e) {
                    161:                printf("[001] %s [%s] %s\n",
                    162:                        $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo()));
                    163:        }
                    164: 
                    165:        print "done!";
                    166: ?>
                    167: --CLEAN--
                    168: <?php
                    169: require dirname(__FILE__) . '/mysql_pdo_test.inc';
                    170: MySQLPDOTest::dropTestTable();
                    171: ?>
                    172: --EXPECTF--
                    173: done!

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>