为了账号安全,请及时绑定邮箱和手机立即绑定

如何在MySQL数据库中获取枚举可能的值?

如何在MySQL数据库中获取枚举可能的值?

PHP
千巷猫影 2019-12-11 13:09:14
我想用数据库中的枚举可能的值自动填充下拉列表。这在MySQL中可能吗?
查看完整描述

3 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

我有一个适合您的codeigniter版本。它还从值中去除引号。


function get_enum_values( $table, $field )

{

    $type = $this->db->query( "SHOW COLUMNS FROM {$table} WHERE Field = '{$field}'" )->row( 0 )->Type;

    preg_match("/^enum\(\'(.*)\'\)$/", $type, $matches);

    $enum = explode("','", $matches[1]);

    return $enum;

}



查看完整回答
反对 回复 2019-12-12
?
温温酱

TA贡献1752条经验 获得超4个赞

您可以通过查询如下来获取值:


SELECT SUBSTRING(COLUMN_TYPE,5)

FROM information_schema.COLUMNS

WHERE TABLE_SCHEMA='databasename' 

    AND TABLE_NAME='tablename'

    AND COLUMN_NAME='columnname'

从那里,您需要将其转换为数组:


如果您很懒,请直接将其评估为数组(尽管MySQL的单引号转义可能不兼容),或者

$ options_array = str_getcsv($ options,',',“'”)可能会起作用(如果更改子字符串以跳过开头和结尾的括号),或者

正则表达式



查看完整回答
反对 回复 2019-12-12
?
森栏

TA贡献1810条经验 获得超5个赞

如果要确定ENUM列的所有可能值,请使用SHOW COLUMNS FROM tbl_name LIKE enum_col并在输出的Type列中解析ENUM定义。


您会想要类似:


$sql = "SHOW COLUMNS FROM `table` LIKE 'column'";

$result = $db->query($sql);

$row = $result->fetchRow();

$type = $row['Type'];

preg_match('/enum\((.*)\)$/', $type, $matches);

$vals = explode(',', $matches[1]);

这将为您提供引用的值。MySQL总是返回用单引号括起来的这些。值中的单引号由单引号引起来。您可能可以安全地调用trim($val, "'")每个数组元素。您将需要转换''为just '。


以下代码将返回$ trimmedvals数组项目,但不带引号:


$trimmedvals = array();

foreach($vals as $key => $value) {

$value=trim($value, "'");

$trimmedvals[] = $value;

}



查看完整回答
反对 回复 2019-12-12
  • 3 回答
  • 0 关注
  • 331 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信