在 MySQL 中,要取得 ENUM 類型欄位的所有允許值,其實不需要撰寫複雜的函數,僅需善用 MySQL 內建的 SQL 語句即可輕鬆搞定。本文以系統表 user 中的 Select_priv 欄位為例,示範如何擷取其所有可能的枚舉值。
關鍵語法如下:
SHOW COLUMNS FROM table_name LIKE enum_column_name;
只需將 table_name 替換為目標資料表名稱,enum_column_name 替換為目標 ENUM 欄位名稱即可。
以下程式碼展示如何連線資料庫、執行查詢並解析回傳的型別字串,最終印出每一個枚舉值:
<?php
// 資料庫連線設定
$host = "localhost";
$dbName = "mysql";
$user = "root";
$pass = "";
$conn = mysql_connect($host, $user, $pass);
mysql_select_db($dbName, $conn);
// 查詢 ENUM 欄位定義
$query = "SHOW COLUMNS FROM user LIKE 'select_priv'";
$result = mysql_db_query($dbName, $query, $conn);
// 取得型別欄位內容,格式類似:enum('N','Y')
$typeStr = mysql_result($result, 0, "Type");
echo "原始型別字串: " . $typeStr . "<br>";
// 解析字串,取得括號內的值
// 1. 移除 'enum(' 前綴
$temp = explode("(", $typeStr);
$temp = $temp[1]; // 取得 'N','Y') 部分
// 2. 移除結尾 ')'
$temp = explode(")", $temp);
$enumList = $temp[0]; // 取得 'N','Y'
// 3. 以逗號分割成陣列
$enumValues = explode(",", $enumList);
// 4. 輸出每個值(並移除單引號)
foreach ($enumValues as $val) {
echo trim($val, "'") . "<br>";
}
mysql_close($conn);
?>
Type 欄位會包含完整的 ENUM 定義,例如 enum('N','Y')。explode),依序移除 enum(、結尾的 ),最後以逗號分隔取得各個值。trim 去除值兩側的單引號,即可獲得純淨的枚舉值列表。注意: 上述範例使用的是較舊的 mysql_* 函式庫,現代專案建議改用 mysqli 或 PDO 以確保安全性與相容性。