1--TEST-- 2mysqli_fetch_field() - data types/field->type 3--EXTENSIONS-- 4mysqli 5--SKIPIF-- 6<?php 7require_once 'skipifconnectfailure.inc'; 8?> 9--FILE-- 10<?php 11 require 'table.inc'; 12 13 function mysqli_field_datatypes($link, $sql_type, $php_value, $php_type, $datatypes, $default_charset="latin1") { 14 if (!mysqli_query($link, "DROP TABLE IF EXISTS test")) { 15 printf("[001] %s, [%d] %s\n", $sql_type, 16 mysqli_errno($link), mysqli_error($link)); 17 return false; 18 } 19 20 $create = sprintf("CREATE TABLE test(id %s) DEFAULT CHARSET %s", $sql_type, $default_charset); 21 if (!mysqli_query($link, $create)) { 22 printf("[002] '%s' - '%s', [%d] %s\n", $sql_type, $create, 23 mysqli_errno($link), mysqli_error($link)); 24 return false; 25 } 26 27 if (is_string($php_value)) 28 $sql = sprintf("INSERT INTO test(id) VALUES ('%s')", $php_value); 29 else 30 $sql = sprintf("INSERT INTO test(id) VALUES (%s)", $php_value); 31 32 if (!mysqli_query($link, $sql)) { 33 printf("[003] '%s' - '%s' - '%s', [%d] %s\n", $sql_type, $create, $sql, 34 mysqli_errno($link), mysqli_error($link)); 35 return false; 36 } 37 38 if (!$res = mysqli_query($link, 'SELECT id FROM test')) { 39 printf("[004] %s, [%d] %s\n", $sql_type, 40 mysqli_errno($link), mysqli_error($link)); 41 return false; 42 } 43 44 if (!is_object($field = mysqli_fetch_field($res))) { 45 printf("[004] %s, expecting object got %s, [%d] %s\n", $sql_type, 46 gettype($field), 47 mysqli_errno($link), mysqli_error($link)); 48 return false; 49 } 50 51 if ($field->type != $php_type) { 52 $code_name = 'unknown'; 53 foreach ($datatypes as $k => $v) { 54 if ($k == $field->type) { 55 $code_name = (is_array($v)) ? $v[0] : $v; 56 break; 57 } 58 } 59 printf("[006] Expecting %d for %s got code %d for %s\n", 60 $php_type, $sql_type, $field->type, $code_name); 61 return false; 62 } 63 64 return true; 65 } 66 67 $datatypes = array( 68 MYSQLI_TYPE_TINY => array('TINYINT', 5), 69 MYSQLI_TYPE_SHORT => array('SMALLINT', 10), 70 MYSQLI_TYPE_LONG => 'MYSQLI_TYPE_LONG - TODO add testing', 71 MYSQLI_TYPE_FLOAT => array('FLOAT', '1.3'), 72 MYSQLI_TYPE_DOUBLE => array('DOUBLE', '1.4'), 73 MYSQLI_TYPE_TIMESTAMP => array('TIMESTAMP', '2007-08-20 18:34:00'), 74 MYSQLI_TYPE_LONGLONG => array('BIGINT', 100), 75 MYSQLI_TYPE_INT24 => array('MEDIUMINT', 10), 76 MYSQLI_TYPE_DATE => array('DATE', '2007-08-20'), 77 MYSQLI_TYPE_TIME => array('TIME', '18:41:38'), 78 MYSQLI_TYPE_DATETIME => array('DATETIME', '2007-08-20 18:42:01'), 79 MYSQLI_TYPE_YEAR => array('YEAR', '2007'), 80 MYSQLI_TYPE_ENUM => array('ENUM("everything", "is", "just", "wonderful")', 'is'), 81 // MYSQLI_TYPE_SET => array('SET("I", "smash", "the")', 'I,smash,the'), - string 82 // MYSQLI_TYPE_TINY_BLOB => array("TINYBLOB", "I got a tiny blog"), - blob 83 // MYSQLI_TYPE_MEDIUM_BLOB => array("MEDIUMBLOB", "No blob for masses"), - blob 84 // MYSQLI_TYPE_LONG_BLOB => array("LONGBLOB", "Small is beautiful?"), - blob 85 MYSQLI_TYPE_BLOB => array("LONGBLOB", 'MySQL does not report proper type. Use Length to distinct BLOB types'), 86 MYSQLI_TYPE_BLOB => array("MEDIUMBLOB", 'MySQL does not report proper type. Use Length to distinct BLOB types'), 87 MYSQLI_TYPE_BLOB => array("TINYBLOB", 'MySQL does not report proper type. Use Length to distinct BLOB types'), 88 MYSQLI_TYPE_BLOB => array("BLOB", 'silly'), 89 MYSQLI_TYPE_VAR_STRING => array("VARCHAR(32768)", 'varchar'), 90 MYSQLI_TYPE_STRING => 'MYSQLI_TYPE_STRING - TODO add testing', 91 MYSQLI_TYPE_STRING => array('CHAR(1)', 'a'), 92 MYSQLI_TYPE_STRING => array("SET('I', 'smash', 'the')", 'smash'), 93 MYSQLI_TYPE_NULL => 'MYSQLI_TYPE_NULL - TODO add testing', 94 MYSQLI_TYPE_NEWDATE => 'MYSQLI_TYPE_NEWDATE - TODO add testing', 95 MYSQLI_TYPE_INTERVAL => 'MYSQLI_TYPE_INTERVAL - TODO add testing', 96 MYSQLI_TYPE_GEOMETRY => 'MYSQLI_TYPE_GEOMETRY - TODO add testing', 97 ); 98 99 $datatypes[MYSQLI_TYPE_NEWDECIMAL] = array('DECIMAL', '1.1'); 100 $datatypes[MYSQLI_TYPE_BIT] = array('BIT', 0); 101 102 foreach ($datatypes as $php_type => $datatype) { 103 if (is_array($datatype)) 104 mysqli_field_datatypes($link, $datatype[0], $datatype[1], $php_type, $datatypes); 105 } 106 107 mysqli_close($link); 108 109 print "done!"; 110?> 111--CLEAN-- 112<?php 113 require_once 'clean_table.inc'; 114?> 115--EXPECT-- 116done! 117