413 votes

Obtenir les noms de colonnes de table en MySQL?

Y a-t-il un moyen de récupérer les noms des colonnes d'une table en MySQL en utilisant PHP?

743voto

Greg Points 132247

Vous pouvez utiliser DESCRIBE:

DESCRIBE my_table;

Ou dans les nouvelles versions, vous pouvez utiliser INFORMATION_SCHEMA:

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

Ou vous pouvez utiliser SHOW COLUMNS:

SHOW COLUMNS FROM my_table;

Ou pour obtenir les noms de colonnes avec une virgule sur une ligne:

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

26 votes

DESCRIBE est en fait un raccourci pour SHOW COLUMNS (dev.mysql.com/doc/refman/5.0/fr/describe.html)

0 votes

@svens oui, DESCRIBES est plus simple, SHOW COLUMNS vous donne plus d'options

11 votes

Je voterais pour la version Information_Schema, car cette syntaxe est prise en charge par la plupart des bases de données majeures. Il vaut mieux ne d'apprendre qu'une seule méthode si possible.

46voto

OMG Ponies Points 144785

Les déclarations SQL suivantes sont presque équivalentes :

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']

Référence : INFORMATION_SCHEMA COLUMNS

1 votes

Pourquoi dites-vous "presque"?

2 votes

@Pacerier Pour une chose, la deuxième ne fonctionnera pas comme une sous-requête.

0 votes

@WAF, je pense qu'il voulait dire quelque chose de totalement différent, pas ça.

21voto

Philip Points 83

J'ai créé une fonction PDO qui renvoie tous les noms de colonnes dans un tableau simple.

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);
    }
}

La sortie sera un tableau :

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

Désolé pour la nécro mais j'aime ma fonction ;)

P.S. Je n'ai pas inclus la classe Core mais vous pouvez utiliser votre propre classe.. D.S.

0 votes

Qu'est-ce que c'est que cette obsession pour les majuscules?

0 votes

Il n'y a rien de mal à répondre à une vieille question sur Stack Overflow.

1 votes

Merci. Pour la sortie, j'ai utilisé de cette façon : $columns = $stmt->fetchAll(\PDO::FETCH_ASSOC); return array_column($columns, 'COLUMN_NAME');

7voto

leeladharan achar Points 176

Cette solution est issue de la ligne de commande mysql

mysql>USE information_schema;

Dans la requête ci-dessous, remplacez simplement <--DATABASE_NAME--> par le nom de votre base de données et <--TABLENAME--> par le nom de votre table où vous voulez simplement les valeurs de champ de l'instruction DESCRIBE

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

3voto

thewebguy Points 1065

Vous pouvez également vouloir vérifier mysql_fetch_array(), comme dans :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X