2014-10-26 24 views
1

我需要从数据库中提取“字段”,“类型”和其他信息。我可以得到的数据,如果我知道这个“场”和“表”使用类似:你可以将数据库“类型”信息与PHP?

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

做一些东西,然后

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

对于这个工作,我必须知道的一个这些字段被称为“描述”。

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

+0

http://dev.mysql.com/doc/refman/5.0/en/getting-information。 HTML – 2014-10-26 23:44:40

回答

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'; 
0

走进MySQL命令行工具(由UNIX等命令行键入的MySQL <回车>)和输入任一:

describe tablename; 

show columns from tablename; 

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

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

SELECT COLUMNS FROM " . DB_TABLE_1; 
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 
    ....