你能用PHP提取数据库“类型”信息吗?

时间:2014-10-26 23:42:52

标签: php mysql database

我需要提取"字段","类型"和来自数据库的其他信息。如果我知道" Field"我可以获取数据。和"表"使用类似的东西:

$query = "SELECT * FROM ".DB_TABLE_1." WHERE id = '$bookmarkID'";

然后做一些事情

$query = "UPDATE ".DB_TABLE_1." SET description = '$description' WHERE id = '$bookmarkID'";

为了实现这一点,我必须知道其中一个字段被称为" description"。

有没有办法查看*(SELECT查询中)的信息,看看" Tile"是名称,数据类型(VARCHAR或TINYINT)以及需要多少个字符?

3 个答案:

答案 0 :(得分:1)

确保您拥有正确的权限并查询information_schema表;

    SELECT `DATA_TYPE`, `CHARACTER_MAXIMUM_LENGTH`, `IS_NULLABLE`, `COLUMN_DEFAULT`
    FROM `information_schema`.`COLUMNS`
    WHERE       `information_schema`.`COLUMNS`.`TABLE_SCHEMA`   = 'my_database'
    AND `information_schema`.`COLUMNS`.`TABLE_NAME`     = 'my_table_name'
    AND `information_schema`.`COLUMNS`.`COLUMN_NAME`    = 'my_column';

答案 1 :(得分:0)

进入MySQL命令行工具(在unix etc命令行输入mysql< enter>)并输入:

describe tablename;

show columns from tablename;

其中表名是表的实际名称。

如果您无法使用该工具,则可以在PHP脚本中运行相同的命令,并循环显示结果,就像对任何选择查询一样。在你的情况下:

SELECT COLUMNS FROM " . DB_TABLE_1;

答案 2 :(得分:0)

这是我用来获取列信息的代码(包括类型和标志)。

$flags = array( 'NOT_NULL_FLAG' => 1,                                                                             
                'PRI_KEY_FLAG' => 2,                                                                              
                'UNIQUE_KEY_FLAG' => 4,                                                                           
                'BLOB_FLAG' => 16,                                                                                
                'UNSIGNED_FLAG' => 32,                                                                            
                'ZEROFILL_FLAG' => 64,                                                                           
                'BINARY_FLAG' => 128,                                                                             
                'ENUM_FLAG' => 256,                                                                               
                'AUTO_INCREMENT_FLAG' => 512,                                                                     
                'TIMESTAMP_FLAG' => 1024,                                                                         
                'SET_FLAG' => 2048,                                                                               
                'NUM_FLAG' => 32768,                                                                              
                'PART_KEY_FLAG' => 16384,                                                                         
                'GROUP_FLAG' => 32768,                                                                            
                'UNIQUE_FLAG' => 65536 );

$types = array( 'TINYINT' => 1,
                'SMALLINT' => 2,
                'INT' => 3,
                'FLOAT' => 4,
                'DOUBLE' => 5,
                'BIGINT' => 8,
                'MEDIUMINT' => 9,
                'BIT' => 16,
                'DECIMAL' => 246,
                'TIMESTAMP' => 7,
                'DATE' => 10,
                'TIME' => 11,
                'DATETIME' => 12,
                'YEAR' => 13,
                'VARCHAR' => 253,
                'CHAR' => 254,
                'TEXT' => 252 );



$result = $mysqli->query( 'SELECT * FROM table LIMIT 1' );
$info = info_array( $result );

foreach ( $info as &$meta ) {
    $meta->_flags = get_flags_array( $meta, $flags );
}

function get_flags_array( $meta, $flags )
{
    $output = array();
    foreach ( $flags as $key => $value ) {
        if ( $meta->flags & $value ) $output[$key] = $value;
    }
    return $output;
}


function info_array( $result )
{
    $output = array();
    foreach ( $result->fetch_fields() as $info_object ) {
        $output[$info_object->name] = $info_object;
    }
    return $output;
}

因此它将获得完整的列信息,$info数组的示例:

Array
(
    [id] => stdClass Object
        (
            [name] => id
            [orgname] => id
            [table] => table_name
            [orgtable] => table_name
            [def] => 
            [db] => database_name
            [catalog] => def
            [max_length] => 1
            [length] => 11
            [charsetnr] => 63
            [flags] => 49667
            [type] => 3
            [decimals] => 0
            [_flags] => Array
                (
                    [NOT_NULL_FLAG] => 1
                    [PRI_KEY_FLAG] => 2
                    [AUTO_INCREMENT_FLAG] => 512
                    [NUM_FLAG] => 32768
                    [PART_KEY_FLAG] => 16384
                    [GROUP_FLAG] => 32768
                )

        )

    [title] => stdClass Object
    ....