Рассмотрим ситуацию, когда нужно узнать, существует ли определённый столбец в таблице, которая находится в базе данных под управлением СУБД MySQL или MariaDB. В этой заметке мы рассмотрим синтаксис SQL-запросов для получения списка столбцов и поиска столбцов по имени. Также мы рассмотрим как проверить наличие столбца в таблице MySQL или MariaDB из PHP кода.
Как вывести все столбцы таблицы в MySQL / MariaDB
С помощью SQL-запроса можно получить список сразу всех столбцов в базе данных.
Следующий пример выберет для использования базу данных mydb и выведет все столбцы таблицы mytable:
USE mydb; SHOW COLUMNS FROM mytable;
Запрос можно записать в одну строку, для этого дважды используется оператор «FROM» — вначале после него указывается таблица, а затем после ещё одного «FROM» указывается база данных, содержащая эту таблицу:
SHOW COLUMNS FROM mytable FROM mydb;
Вы можете использовать более наглядный синтаксис БАЗАДАННЫХ.ТАБЛИЦА:
SHOW COLUMNS FROM mydb.mytable;
Все 3 примера выведут одинаковый результат.
Примечание: в показанных выше и во всех последующих SQL-запросах вы можете заменить «FROM» на ключевое слово «IN» — результат будет идентичным. Например:
SHOW COLUMNS IN mytable FROM mydb; SHOW COLUMNS IN mydb.mytable;
Примечание 2: вы также можете заменить «COLUMNS» на «FIELDS» и вновь получите идентичный результат. Например:
SHOW FIELDS FROM mytable FROM mydb; SHOW FIELDS FROM mydb.mytable;
Как найти столбцы таблицы по шаблону имени
С помощью оператора «LIKE» в качестве строки поиска вы можете использовать шаблоны с подстановочными символами, например:
SHOW COLUMNS FROM mytable LIKE '%id'
Этот пример выведет все столбцы, название которых оканчивается на «id».
Если не использовать подстановочные символы, то оператор «LIKE» является эквивалентом «=».
Как найти столбцы по точному совпадению имени
Вы можете использовать на выбор один из следующих вариантов.
SQL-запрос с оператором «LIKE» без указания подстановочных символов:
SHOW COLUMNS FROM mytable LIKE 'id'
SQL-запрос с оператором «WHERE»:
SHOW COLUMNS FROM mytable WHERE field = 'column name';
Оба этих SQL-запроса дадут одинаковый результат.
Как искать по атрибутам таблицы в MySQL / MariaDB
С помощью «WHERE» также можно искать по атрибутам таблицы, например:
SHOW COLUMNS FROM table WHERE type LIKE 'varchar%'
Этот пример найдёт все столбцы с типом данных VARCHAR.
Подробности о поиске по атрибутам таблицы смотрите по ссылке: https://dev.mysql.com/doc/refman/9.0/en/show-columns.html
Как в PHP проверить, существует ли определённый столбец (поле) в таблице
Следующий код проверяет, существует ли столбец test_column в таблицы TestTABLE которая находится в базе данных TestDB:
$db_user = 'root'; $db_password = ''; $db_name = 'TestDB'; $mysqli = new mysqli("localhost", $db_user, $db_password, $db_name); if ($mysqli->connect_errno) { printf("Не удалось подключиться: %s\n", $mysqli->connect_error); exit(); } $query = "SHOW COLUMNS FROM TestTABLE WHERE field = 'test_column';"; $result = $mysqli->query($query); if (mysqli_num_rows($result)==0) { echo 'The column does not exist' . PHP_EOL; // Действия когда столбец отсутствует } else { echo 'The column exists' . PHP_EOL; // Действия когда столбец существует }
Связанные статьи:
- Как вывести список пользователей MySQL / MariaDB и их привилегии (с помощью клиента СУБД и PHP) (50%)
- PHP не отображает эмодзи из базы данных MySQL / MariaDB (РЕШЕНО) (50%)
- Ошибка «PHP Fatal error: Uncaught mysqli_sql_exception: No database selected» (РЕШЕНО) (50%)
- Как в таблице MySQL/MariaDB найти строки с пустым значением столбца (в phpMyAdmin и в командной строке) (43.5%)
- Как в MySQL и MariaDB для таблицы вывести только имена столбцов и ничего более (43.5%)
- Ошибка «No such file or directory: AH02454: FCGI: attempt to connect to Unix domain socket /run/php/php8.1-fpm.sock (*:80) failed» (РЕШЕНО) (RANDOM - 34.5%)