获取列默认值,因为它们是结果集的一行

时间:2012-03-11 04:36:05

标签: php mysql sql

有没有办法获取列的默认值,因为它们是结果集的一行?

`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(插入模式)我希望这些字段包含默认值价值作为占位符

提前谢谢

4 个答案:

答案 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来说,这是不可能的。

为什么你不能只检查输入字段,如果是空的 - 根本不插入,让数据库设置这些默认值

我相信,你只是在思考它。