3 回答
TA贡献1847条经验 获得超7个赞
我有一个适合您的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;
}
TA贡献1883条经验 获得超3个赞
您可以通过查询如下来获取值:
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,',',“'”)可能会起作用(如果更改子字符串以跳过开头和结尾的括号),或者
正则表达式
TA贡献1827条经验 获得超8个赞
如果要确定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;
}
添加回答
举报