你能拉数据库吗;类型“;在PHP中输入信息


Can you pull database "type" info in with PHP?

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

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

做一些事情然后

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

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

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

确保您拥有正确的权限并查询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';

进入MySQL命令行工具(通过在unix etc命令行上键入MySQL<enter>),然后键入:

describe tablename;

show columns from tablename;

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

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

SELECT COLUMNS FROM " . DB_TABLE_1;

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

$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
    ....