在開發 PHP 應用時,經常需要動態獲取 MySQL 資料表的欄位名稱,例如用於自動生成表單、建立動態查詢介面或進行資料匯出。本文將介紹兩種常用方法:使用 SHOW COLUMNS 語句與查詢 INFORMATION_SCHEMA.COLUMNS 視圖,並示範如何在 PHP 中將結果輸出到網頁。
最直接的方式是執行 SHOW COLUMNS FROM 表名。此命令會返回該表每個欄位的詳細資訊,包括 Field(欄位名)、Type、Null、Key、Default、Extra 等。
SHOW COLUMNS FROM `users`;
在 PHP 中執行並輸出欄位名:
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_errno) {
die("連線失敗: " . $mysqli->connect_error);
}
$result = $mysqli->query("SHOW COLUMNS FROM `users`");
if ($result) {
echo "<table border='1'><tr><th>欄位名稱</th><th>類型</th></tr>";
while ($row = $result->fetch_assoc()) {
echo "<tr><td>" . htmlspecialchars($row['Field']) . "</td>";
echo "<td>" . htmlspecialchars($row['Type']) . "</td></tr>";
}
echo "</table>";
$result->free();
}
$mysqli->close();
?>
若需更靈活的篩選(如特定資料庫、排除某些欄位),可查詢系統視圖:
SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'your_db' AND TABLE_NAME = 'your_table'
ORDER BY ORDINAL_POSITION;
PHP 範例:
<?php
$pdo = new PDO("mysql:host=localhost;dbname=your_db", "user", "password");
$stmt = $pdo->prepare("
SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?
ORDER BY ORDINAL_POSITION
");
$stmt->execute(['your_db', 'your_table']);
$columns = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo "<ul>";
foreach ($columns as $col) {
echo "<li>" . htmlspecialchars($col['COLUMN_NAME']) . " (" . htmlspecialchars($col['DATA_TYPE']) . ")</li>";
}
echo "</ul>";
?>
htmlspecialchars() 轉義,避免 XSS 攻擊。