web-dev-qa-db-fra.com

Obtenir les noms de colonne de table dans MySQL?

Est-il possible de récupérer le nom des colonnes d'une table dans mysql? en utilisant php

263
An employee

Vous pouvez utiliser DECRIRE :

DESCRIBE my_table;

Ou dans les versions plus récentes, 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 AFFICHER LES COLONNES :

SHOW COLUMNS FROM my_table;
482
Greg

Les instructions 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

34
OMG Ponies

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.

20
Philip

Cette solution provient de la ligne de commande mysql

mysql>USE information_schema;

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

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

Que dis-tu de ça:

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;
4
Wolf Metzner

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';
}
3
thewebguy

Il est également intéressant de noter que vous pouvez utiliser
EXPLAIN table_name qui est synonyme de DESCRIBE table_name et SHOW COLUMNS FROM table_name bien que EXPLIQUER soit plus couramment utilisé pour obtenir des informations sur le plan d'exécution de la requête.

3
AnthonyS

Examiner:

mysql_query('DESCRIBE '.$table);
3
Andy Hume

La fonction de description de table MySQL devrait vous amener où vous voulez aller (mettez le nom de votre table dans "table"). Vous devrez analyser la sortie, mais c'est assez facile. Si je me souviens bien, si vous exécutez cette requête, le résultat de la requête PHP qui accède à des fonctions qui vous donneraient normalement une paire clé-valeur aura les noms de colonnes comme clés. Mais cela fait longtemps que je n’utilise pas PHP alors ne me retenez pas pour ça. :)

3
dannysauer

Il y a aussi ceci si vous préférez:

mysql_query('SHOW COLUMNS FROM tableName'); 
3
James Goodwin

J'avais besoin de noms de colonnes sous forme de tableau à plat, tandis que les autres réponses renvoyaient des tableaux associatifs. J'ai donc utilisé:

$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 est maintenant égal à:

(
    [0] => name
    [1] => parent
    [2] => number
    [3] => chart_id
    [4] => type
    [5] => id
)
3
duhaime
$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);
}
2
ibRQD

La fonction mysql_list_fields pourrait vous intéresser; mais comme le dit le manuel:

Cette fonction est obsolète. Il est préférable d'utiliser mysql_query() pour émettre une instruction SQL _SHOW COLUMNS FROM table [LIKE 'name']_.

2
Pascal MARTIN

cela a fonctionné pour moi ..

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

vous pouvez obtenir la structure complète de la table en utilisant la commande simple suivante.

DESC TableName

ou vous pouvez utiliser la requête suivante.

SHOW COLUMNS FROM TableName
1
Harish Kumar

dans mysql pour obtenir les détails des colonnes et la structure des tables en suivant les mots-clés ou les requêtes

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
denny

J'ai écrit un script php simple pour récupérer des colonnes de table via PHP: Show_table_columns.php

Prendre plaisir!

1
Hussnain sheikh