Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Lấy các giá trị ENUM có thể có trong MySQL bằng PHP

Tóm tắt

Truy vấn INFORMATION_SCHEMA.COLUMNS để lấy định nghĩa cột ENUM, sau đó xử lý chuỗi trong PHP để tách các giá trị.

Truy vấn SQL

SELECT COLUMN_TYPE AS AllPossibleEnumValues
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'ten_database'
  AND TABLE_NAME = 'ten_bang'
  AND COLUMN_NAME = 'ten_cot_enum';

Ví dụ

1. Tạo bảng có cột ENUM

CREATE TABLE EnumDemo (
    Id INT,
    Color ENUM('RED','GREEN','BLUE','BLACK','ORANGE')
);

2. Kết quả truy vấn

+---------------------------------------------+
| AllPossibleEnumValues                       |
+---------------------------------------------+
| enum('RED','GREEN','BLUE','BLACK','ORANGE') |
+---------------------------------------------+

Xử lý trong PHP

$result = $mysqli->query("SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_SCHEMA='sample' AND TABLE_NAME='EnumDemo' AND COLUMN_NAME='Color'");
$row = $result->fetch_assoc();
$enum_str = $row['COLUMN_TYPE']; // "enum('RED','GREEN','BLUE','BLACK','ORANGE')"

// Tách các giá trị
preg_match_all("/'([^']*)'/", $enum_str, $matches);
$enum_values = $matches[1]; // ['RED','GREEN','BLUE','BLACK','ORANGE']

print_r($enum_values);

Kết quả PHP

Array
(
    [0] => RED
    [1] => GREEN
    [2] => BLUE
    [3] => BLACK
    [4] => ORANGE
)

Lưu ý

  • Cần quyền SELECT trên INFORMATION_SCHEMA.
  • Regex /'([^']*)'/ hoạt động tốt cho ENUM đơn giản; ENUM chứa dấu nháy đơn trong giá trị cần xử lý phức tạp hơn.
  • MySQL 8.0+ có thể dùng JSON_TABLE sau khi chuyển đổi, nhưng cách trên tương thích rộng rãi.