Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取列的默认值,因为它们是结果集的一行_Php_Mysql_Sql - Fatal编程技术网

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

Php 获取列的默认值,因为它们是结果集的一行,php,mysql,sql,Php,Mysql,Sql,有没有办法获取列的默认值,因为它们是resultset的一行 `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

有没有办法获取列的默认值,因为它们是resultset的一行

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


提前感谢您

当然,使用
信息\u模式
数据库(存储有关数据库结构的所有信息),您可以执行以下操作:

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

使用
描述

以下是单个字段的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'];
}
有一个函数

SELECT DEFAULT( id ) , DEFAULT( EXAMPLE )  FROM test LIMIT 1

在上面的查询中,您似乎需要在表中至少有一条记录,否则它不会返回任何记录。对于当前时间戳,它返回一个时间戳格式的0字符串。

我认为这样的行为没有用,并且发现它是错误的

使用起来不方便。假设我想输入自己的状态值。我必须先删除默认值22。
更糟糕的是约会。不是设置当前日期时间,而是让我编辑整个日期。为什么?
对于身份证来说,这是不可能的

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


我相信你只是想得太多了

不,我要找的是返回列名->默认值对,因为它们是列。。。您的代码返回行!使用应用程序代码检索行并将其格式化为列。否则你可以转动它,就像我说的。。。必须返回一行,其中列是表的列,值是它们的默认值very close。。。是否有一种方法可以将每一列都设置为DEFAULT()?像这样的事。。。从MyTable中选择DEFAULT(*),恐怕没有类似的内容。但你可以深入到文档或谷歌上,我当然想得太多了。在尝试了“至少”20种不同的方法之后,简单地检测字段是否为空并且不将其包含在insert查询中确实是答案。我原以为它会为没有默认值的列抛出错误,但可惜它没有。谢谢
SELECT DEFAULT( id ) , DEFAULT( EXAMPLE )  FROM test LIMIT 1