Как получить имена столбцов таблицы в MySQL через PHP?
Решение с использованием PDO (рекомендуемый способ)
Современный и безопасный подход — использовать расширение PDO. Оно поддерживает метод getColumnMeta(), который возвращает метаданные о столбцах результата запроса. Вот полный пример:
<?php
// Подключение к БД через PDO
$dsn = 'mysql:host=localhost;dbname=shop;charset=utf8mb4';
$user = 'root';
$password = '';
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];
try {
$pdo = new PDO($dsn, $user, $password, $options);
// Выполняем запрос
$stmt = $pdo->query('SELECT * FROM products LIMIT 1');
// Получаем имена столбцов
$columns = [];
$count = $stmt->columnCount();
for ($i = 0; $i < $count; $i++) {
$meta = $stmt->getColumnMeta($i);
$columns[] = $meta['name'];
}
// Теперь $columns содержит массив имен столбцов
echo '<pre>';
print_r($columns);
echo '</pre>';
// Выводим таблицу с динамическими заголовками
echo '<table border="1">';
echo '<thead><tr>';
foreach ($columns as $col) {
echo '<th>' . htmlspecialchars($col) . '</th>';
}
echo '</tr></thead>';
// Выводим данные
echo '<tbody>';
while ($row = $stmt->fetch()) {
echo '<tr>';
foreach ($columns as $col) {
echo '<td>' . htmlspecialchars($row[$col] ?? '') . '</td>';
}
echo '</tr>';
}
echo '</tbody></table>';
} catch (PDOException $e) {
echo 'Ошибка: ' . $e->getMessage();
}
?>
Решение с использованием MySQLi
Если вы используете расширение MySQLi, то можно воспользоваться методом fetch_fields():
<?php
$mysqli = new mysqli('localhost', 'root', '', 'shop');
if ($mysqli->connect_error) {
die('Ошибка подключения: ' . $mysqli->connect_error);
}
$result = $mysqli->query('SELECT * FROM products LIMIT 1');
// Получаем массив объектов с информацией о полях
$fields = $result->fetch_fields();
$columns = [];
foreach ($fields as $field) {
$columns[] = $field->name; // name - имя столбца
}
print_r($columns);
$result->free();
$mysqli->close();
?>
Важные замечания
- LIMIT 1 — используйте его, чтобы не загружать все данные, если вам нужны только имена столбцов.
- Безопасность: всегда экранируйте вывод через
htmlspecialchars()при отображении в HTML. - Альтернатива: можно получить имена столбцов напрямую из INFORMATION_SCHEMA:
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'products', но это дополнительный запрос к БД.
Рекомендую использовать PDO, так как это более современное расширение с лучшей поддержкой prepared statements и разных СУБД.
<<Альтернативный подход: запрос к INFORMATION_SCHEMA
Если вам нужно получить имена столбцов без выполнения SELECT-запроса (например, для построения схемы таблицы), можно напрямую обратиться к системной таблице MySQL:
<?php
$pdo = new PDO('mysql:host=localhost;dbname=shop', 'root', '');
$stmt = $pdo->query("
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'shop'
AND TABLE_NAME = 'products'
ORDER BY ORDINAL_POSITION
");
$columns = $stmt->fetchAll(PDO::FETCH_COLUMN);
print_r($columns);
?>
Когда это полезно?
- Когда таблица пуста (SELECT не вернёт ни одной строки).
- Когда нужно получить не только имена, но и типы данных, nullable, дефолтные значения.
Минус: это отдельный запрос к БД, что может быть чуть медленнее, чем использование getColumnMeta().
Ответов пока нет.
Войдите чтобы оставить ответ
Блоги