有没有办法获取列的默认值,因为它们是结果集的一行?
`id` mediumint(9) NOT NULL AUTO_INCREMENT,
`state` tinyint(2) NOT NULL DEFAULT '22',
`pubdate` datetime NOT NULL DEFAULT '2012-01-01 00:00:00',
例如像这样的表应该返回此记录:
id->NULL (?)
state->22
pubdate->2012-01-01 00:00:00
实际上,当某个用户打开edit.php?id = 44时,他会得到第44行(更新模式),但是如果他打开edit.php?id = 0(插入模式)我希望这些字段包含默认值价值作为占位符
提前谢谢
答案 0 :(得分:3)
当然,使用information_schema
数据库(存储有关数据库结构的所有信息),您可以执行以下操作:
SELECT
COLUMN_NAME,
COLUMN_DEFAULT
TABLE_NAME
FROM information_schema.COLUMNS
WHERE
TABLE_NAME='your_table_name'
AND TABLE_SCHEMA='your_database_name'
如果列数有限,可以使用以下结构将它们收集到一行:
SELECT
id.defaultval AS id_default,
state.defaultval AS state_default,
pubdate.defaultval AS pubdate_default
FROM
(SELECT TABLE_NAME, COLUMN_DEFAULT AS defaultval FROM information_schema.COLUMNS WHERE TABLE_NAME='your_table' AND TABLE_SCHEMA='your_database' AND COLUMN_NAME='id') id
JOIN (SELECT COLUMN_DEFAULT AS defaultval FROM information_schema.COLUMNS WHERE TABLE_NAME='your_table' AND TABLE_SCHEMA='your_database' AND COLUMN_NAME='state') state ON id.TABLE_NAME = state.TABLE_NAME
JOIN (SELECT COLUMN_DEFAULT AS defaultval FROM information_schema.COLUMNS WHERE TABLE_NAME='your_table' AND TABLE_SCHEMA='your_database' AND COLUMN_NAME='pubdate') pubdate ON id.TABLE_NAME = pubdate.TABLE_NAME
答案 1 :(得分:3)
使用DESCRIBE
http://dev.mysql.com/doc/refman/5.0/en/describe.html
DESCRIBE sometable [somefield]
这是单个字段的php示例:
$resource = mysql_query("DESCRIBE sometable somefield");
$schema = mysql_fetch_assoc($resource);
$default = $schema['default'];
以下是几个字段的php示例:
$resource = mysql_query("DESCRIBE sometable");
while ($schema = mysql_fetch_assoc($resource)) {
$default_list[$schema['Field']] = $schema['Default'];
}
答案 2 :(得分:3)
有一个DEFAULT函数
SELECT DEFAULT( id ) , DEFAULT( EXAMPLE ) FROM test LIMIT 1
通过上面的查询,您似乎需要在表中至少有一条记录,否则它不会返回任何记录。对于当前时间戳,它返回时间戳格式的字符串0。
答案 3 :(得分:1)
我认为这种行为毫无用处并且发现错误。
使用起来不方便。想象一下,我想输入自己的状态值。我必须先删除默认值22
日期更糟糕。您不必设置当前日期时间,而是让我编辑整个日期。为什么呢?
对于id来说,这是不可能的。
为什么你不能只检查输入字段,如果是空的 - 根本不插入,让数据库设置这些默认值
我相信,你只是在思考它。