3 回答

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超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貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個贊
您可以通過查詢?nèi)缦聛慝@取值:
SELECT SUBSTRING(COLUMN_TYPE,5)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA='databasename'
AND TABLE_NAME='tablename'
AND COLUMN_NAME='columnname'
從那里,您需要將其轉(zhuǎn)換為數(shù)組:
如果您很懶,請直接將其評估為數(shù)組(盡管MySQL的單引號轉(zhuǎn)義可能不兼容),或者
$ options_array = str_getcsv($ options,',',“'”)可能會起作用(如果更改子字符串以跳過開頭和結(jié)尾的括號),或者
正則表達(dá)式

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超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總是返回用單引號括起來的這些。值中的單引號由單引號引起來。您可能可以安全地調(diào)用trim($val, "'")每個數(shù)組元素。您將需要轉(zhuǎn)換''為just '。
以下代碼將返回$ trimmedvals數(shù)組項(xiàng)目,但不帶引號:
$trimmedvals = array();
foreach($vals as $key => $value) {
$value=trim($value, "'");
$trimmedvals[] = $value;
}
添加回答
舉報