Получить имена столбцов таблицы в MySQL?

243

Есть ли способ захватить имя столбца таблицы в mysql? используя php

Теги:

17 ответов

411
Лучший ответ

Вы можете использовать DESCRIBE:

DESCRIBE my_table;

Или в более новых версиях вы можете использовать INFORMATION_SCHEMA:

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';

Или вы можете использовать SHOW COLUMNS:

SHOW COLUMNS FROM my_table;
  • 10
    DESCRIBE - это ярлык SHOW COLUMNS ( dev.mysql.com/doc/refman/5.0/en/describe.html ).
  • 0
    @ svens да, ОПИСЫВАЕТСЯ проще, ПОКАЗАТЬ КОЛОННЫ дает вам больше возможностей
Показать ещё 9 комментариев
33

Следующие операторы SQL почти эквивалентны:

SELECT COLUMN_NAME
  FROM INFORMATION_SCHEMA.COLUMNS
 WHERE table_name = 'tbl_name'
  [AND table_schema = 'db_name']
  [AND column_name LIKE 'wild']

SHOW COLUMNS
FROM tbl_name
[FROM db_name]
[LIKE 'wild']

Ссылка: INFORMATION_SCHEMA COLUMNS

  • 1
    Почему вы говорите «почти»?
  • 2
    @Pacerier Во-первых, второй не будет работать как подзапрос.
Показать ещё 2 комментария
19

Я создал функцию PDO, которая возвращает все имена столбцов в простом массиве.

public function getColumnNames($table){
    $sql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = :table";
    try {
        $core = Core::getInstance();
        $stmt = $core->dbh->prepare($sql);
        $stmt->bindValue(':table', $table, PDO::PARAM_STR);
        $stmt->execute();
        $output = array();
        while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
            $output[] = $row['COLUMN_NAME'];                
        }
        return $output; 
    }

    catch(PDOException $pe) {
        trigger_error('Could not connect to MySQL database. ' . $pe->getMessage() , E_USER_ERROR);
    }
}

Выход будет массивом:

Array (
[0] => id
[1] => name
[2] => email
[3] => shoe_size
[4] => likes
... )

Извините за necro, но мне нравится моя функция;)

P.S. Я не включил класс Core, но вы можете использовать свой собственный класс. D.S.

  • 0
    Что с прописным фетишем?
  • 0
    Нет ничего плохого в ответе на старый вопрос о переполнении стека.
Показать ещё 1 комментарий
5

Как насчет этого:

SELECT @cCommand := GROUP_CONCAT( COLUMN_NAME ORDER BY column_name SEPARATOR ',\n')
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';

SET @cCommand = CONCAT( 'SELECT ', @cCommand, ' from my_database.my_table;');
PREPARE xCommand from @cCommand;
EXECUTE xCommand;
5

Это решение из командной строки mysql

mysql>USE information_schema;

В следующем запросе просто измените < - DATABASE_NAME → на свою базу данных и < - TABLENAME → на имя таблицы, где вам просто нужны значения поля инструкции DESCRIBE

mysql> SELECT COLUMN_NAME FROM COLUMNS WHERE TABLE_SCHEMA = '<--DATABASE_NAME-->' AND   TABLE_NAME='<--TABLENAME-->';
  • 1
    Другие ответы уже упоминали об этом ..........
3

Интересно также отметить, что вы можете использовать
EXPLAIN table_name которое является синонимом DESCRIBE table_name и SHOW COLUMNS FROM table_name хотя EXPLAIN чаще используется для получения информации о плане выполнения запроса.

3

Вы также можете проверить mysql_fetch_array(), как в:

$rs = mysql_query($sql);
while ($row = mysql_fetch_array($rs)) {
//$row[0] = 'First Field';
//$row['first_field'] = 'First Field';
}
3

Там также это, если вы предпочитаете:

mysql_query('SHOW COLUMNS FROM tableName'); 
3

Посмотрите:

mysql_query('DESCRIBE '.$table);
3

Функция MySQL описать таблицу должен получить вас туда, куда вы хотите пойти (поместите свое имя таблицы в "таблицу" ). Вам придется разбирать результаты, но это довольно легко. Насколько я помню, если вы выполните этот запрос, результат запроса PHP, получающий доступ к функциям, которые обычно дают вам пару с ключом, будет иметь имена столбцов в качестве ключей. Но прошло какое-то время, так как я использовал PHP, поэтому не держите меня в этом.:)

2

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

$con = mysqli_connect('localhost',$db_user,$db_pw,$db_name);
$table = 'people';

/**
* Get the column names for a mysql table
**/

function get_column_names($con, $table) {
  $sql = 'DESCRIBE '.$table;
  $result = mysqli_query($con, $sql);

  $rows = array();
  while($row = mysqli_fetch_assoc($result)) {
    $rows[] = $row['Field'];
  }

  return $rows;
}

$col_names = function get_column_names($con, $table);

$col_names теперь равно:

(
    [0] => name
    [1] => parent
    [2] => number
    [3] => chart_id
    [4] => type
    [5] => id
)
2

Функция mysql_list_fields может вас заинтересовать; но, как указано в руководстве:

Эта функция устарела. это предпочтительнее использовать mysql_query() для вместо этого выполните инструкцию SQL SHOW COLUMNS FROM table [LIKE 'name'].

  • 0
    Как работает функция, если она не выдает SQL-запрос к серверу? Почему это устарело?
1

Я написал простой скрипт php для получения столбцов таблицы через PHP: Show_table_columns.php

Наслаждайтесь!

  • 0
    Пожалуйста, опубликуйте фактический ответ здесь и используйте только свою суть как резервную копию / ссылку
1
$col = $db->query("SHOW COLUMNS FROM category");

while ($fildss = $col->fetch_array())
{             
    $filds[] = '"{'.$fildss['Field'].'}"';
    $values[] = '$rows->'.$fildss['Field'].'';
}

if($type == 'value')
{
    return $values = implode(',', $values);
}
else {
     return $filds = implode(',', $filds);
}
  • 1
    Чтобы быть более полезными для будущих пользователей, не могли бы вы предоставить некоторый контекст для своего ответа, а не просто дамп кода.
1

в mysql для получения сведений о столбцах и структуры таблицы по следующим ключевым словам или запросам

1. DESC table_name

2. DESCRIBE table_name

3. SHOW COLUMNS FROM table_name

4. SHOW create table table_name;

5. EXPLAIN table_name

1

вы можете получить всю структуру таблицы, используя следующую простую команду.

DESC TableName

или вы можете использовать следующий запрос.

SHOW COLUMNS FROM TableName
1

это сработало для меня..

$sql = "desc MyTableName";
$result = @mysql_query($sql);
while($row = @mysql_fetch_array($result)){
    echo $row[0]."<br>";
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню