Как получить имена колонок таблицы базы данных в WordPress и MySQL

В этой заметке покажу пример, как получить названия столбцов указанной таблицы MySQL в WordPress (как получить все поля таблицы).

Это может быть полезно при работе с пользовательскими таблицами. В частности:

  • Когда нужно собрать заголовки для формирования эксель таблицы.
  • Когда нужно добавить или удалить колонку таблицы, но перед этим проверить есть ли вообще такая колонка.
  • и т.д.

MySQL Команды DESC, DESCRIBE, SHOW COLUMNS FROM

Все команды: DESC, DESCRIBE, SHOW COLUMNS FROM делают одно и тоже - получает данные колонок таблицы MySQL:

mysql> DESC wp_terms;
+------------+---------------------+------+-----+---------+----------------+
| Field      | Type                | Null | Key | Default | Extra          |
+------------+---------------------+------+-----+---------+----------------+
| term_id    | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| name       | varchar(200)        | NO   | MUL |         |                |
| slug       | varchar(200)        | NO   | MUL |         |                |
| term_group | bigint(10)          | NO   |     | 0       |                |
+------------+---------------------+------+-----+---------+----------------+
4 rows in set (0.001 sec)

Следующие запросы вернут тот же результат:

mysql> DESCRIBE wp_terms;
mysql> SHOW COLUMNS FROM wp_terms;

Таким образом мы можем взять только первую колонку, где будут названия всех полей таблицы:

global $wpdb;

$columns = $wpdb->get_col( "DESC wp_terms" );

print_r( $columns );

/*
Array
(
	[0] => term_id
	[1] => name
	[2] => slug
	[3] => term_group
)
*/

Получим более подробную информацию о колонках таблицы MySQL:

Для этого используем $wpdb->get_results(), а не $wpdb->get_col():

global $wpdb;

$result = $wpdb->get_results( "DESC wp_terms" );
// или
$result = $wpdb->get_results( "DESCRIBE wp_terms" );
// или
$result = $wpdb->get_results( "SHOW COLUMNS FROM wp_terms" );

print_r( $result );

/*
Array
(
	[0] => stdClass Object
		(
			[Field] => term_id
			[Type] => bigint(20) unsigned
			[Null] => NO
			[Key] => PRI
			[Default] =>
			[Extra] => auto_increment
		)

	[1] => stdClass Object
		(
			[Field] => name
			[Type] => varchar(200)
			[Null] => NO
			[Key] => MUL
			[Default] =>
			[Extra] =>
		)

	[2] => stdClass Object
		(
			[Field] => slug
			[Type] => varchar(200)
			[Null] => NO
			[Key] => MUL
			[Default] =>
			[Extra] =>
		)

	[3] => stdClass Object
		(
			[Field] => term_group
			[Type] => bigint(10)
			[Null] => NO
			[Key] =>
			[Default] => 0
			[Extra] =>
		)

	[4] => stdClass Object
		(
			[Field] => term_order
			[Type] => int(4)
			[Null] => YES
			[Key] =>
			[Default] => 0
			[Extra] =>
		)
)
*/