2009-10-06 4 views

ответ

387

Вы можете использовать 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; 
+9

DESCRIBE на самом деле является ярлыком для SHOW COLUMNS (http: //dev.mysql.com/doc/refman/5.0/en/describe.html) – svens

+0

@svens yeah, DESCRIBES проще, SHOW COLUMNS дает вам больше опций – Greg

+8

Я бы проголосовал за версию Information_Schema, так как этот синтаксис поддерживается большинством основных баз данных. Лучше всего учиться только одному, если нужно. – Kibbee

3

Посмотрите на: функции

mysql_query('DESCRIBE '.$table); 
3

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

+0

Есть несколько хороших документов на php.net в http://us3.php.net/manual/en/function.mysql-list-fields.php – dannysauer

32

Следующие 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

Почему вы говорите «почти»? – Pacerier

+1

@Pacerier Во-первых, второй не будет работать как подзапрос. – WAF

+0

@WAF, я думаю, он имел в виду нечто совсем другое, не то. – Pacerier

3

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

mysql_query('SHOW COLUMNS FROM tableName'); 
2

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

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

+0

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

3

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

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

Я сделал функцию 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 
...) 

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

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

+0

Что такое фетиш в верхнем регистре? – Pacerier

+0

Нет ничего плохого в ответе на старый вопрос о переполнении стека. – bdsl

+1

Спасибо. Для вывода я использовал этот способ: $ columns = $ stmt-> fetchAll (\ PDO :: FETCH_ASSOC); return array_column ($ columns, COLUMN_NAME); – Ehsan

5

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

mysql>USE information_schema; 

В ниже запросе просто изменить < --DATABASE_NAME -> к базе данных и < --TABLENAME -> к вашему имени таблицы, где вы просто хотите поле значения ОПИСАТЬ Заявление о

mysql> SELECT COLUMN_NAME FROM COLUMNS WHERE TABLE_SCHEMA = '<--DATABASE_NAME-->' AND TABLE_NAME='<--TABLENAME-->'; 
+0

Другие ответы уже упоминали об этом .......... – Pacerier

3

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

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; 
1

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

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

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

DESC TableName 

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

SHOW COLUMNS FROM TableName 
1

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

1. DESC table_name

2. DESCRIBE table_name

SHOW COLUMNS FROM table_name 3.

4. SHOW create table table_name;

5. EXPLAIN table_name

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

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

$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 
) 
1

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

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

+0

Пожалуйста, разместите фактический ответ здесь и используйте только свой реестр в качестве резервной копии/ссылки – ChrisF

Смежные вопросы