我需要提取"字段","类型"和来自数据库的其他信息。如果我知道" 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)以及需要多少个字符?
答案 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
....