Obtenez les noms des colonnes de table dans MySQL?


301

Existe-t-il un moyen de récupérer le nom des colonnes d'une table dans mysql? en utilisant php

Réponses:


537

Vous pouvez utiliser DESCRIBE :

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 SHOW COLUMNS :

SHOW COLUMNS FROM my_table;

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

11
Je voterais pour la version Information_Schema, car cette syntaxe est prise en charge par la plupart des principales bases de données. Mieux vaut n'apprendre qu'une seule façon si vous le devez.
Kibbee

3
+1 Je voulais sélectionner les noms de table où il y a une colonneSELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'db_name' AND COLUMN_NAME = 'col_name';
AL̲̳I

2
économiser des octets en utilisant desc my_table;:-)
Alfonso Pérez

3
DESCpour décrire peut être facilement confondu avec DESCpour descendre. Le nombre nominal d'octets que vous enregistrez pour le manque de lisibilité n'en vaut pas la peine.
Jacques Mathieu

34

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


1
Pourquoi dites-vous "presque"?
Pacerier

2
@Pacerier D'une part, la seconde ne fonctionnera pas comme une sous-requête.
WAF

@WAF, je pense qu'il voulait dire autre chose, pas ça.
Pacerier

2
Dans mon test rapide, SHOW COLUMNSretourne un tableau contenant les noms de colonne, les types, etc., tandis que SELECT COLUMN NAMErenvoie uniquement les noms de colonne.
mwfearnley

20

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

PS Je n'ai pas inclus la classe Core mais vous pouvez utiliser votre propre classe .. DS


Quel est le fétiche majuscule?
Pacerier

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

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

6

Cette solution provient de la ligne de commande mysql

mysql>USE information_schema;

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

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

4

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

mysql_query('SHOW COLUMNS FROM tableName'); 

4

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

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



3

La fonction MySQL décrit la table devrait vous amener où vous voulez aller (mettez votre nom de table pour "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 accédant aux fonctions qui vous donneraient normalement une paire clé-valeur aura les noms de colonne comme clés. Mais cela fait un moment que je n'ai pas utilisé PHP, alors ne m'y tenez pas. :)


Il y a de très bons documents sur php.net dans us3.php.net/manual/en/function.mysql-list-fields.php
dannysauer

3

Vous pouvez également 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

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 désormais égal à:

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

2

La mysql_list_fieldsfonction 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 SHOW COLUMNS FROM table [LIKE 'name']instruction SQL à la place.


Comment fonctionne la fonction si elle n'émet pas de requête SQL au serveur? Pourquoi est-il déconseillé?
Pacerier

2

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

2

dans mysql pour obtenir les détails des colonnes et la structure des tableaux en suivant des mots clés ou des 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


2
$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
Pour être plus utile aux futurs utilisateurs, pourriez-vous fournir un contexte pour votre réponse, pas seulement un vidage de code.
Paul Zahra

1

cela a fonctionné pour moi ..

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

1

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

<?php
$db = 'Database'; //Database name
$host = 'Database_host'; //Hostname or Server ip
$user = 'USER'; //Database user
$pass = 'Password'; //Database user password
$con = mysql_connect($host, $user, $pass);
if ($con) {
    $link = mysql_select_db($db) or die("no database") . mysql_error();
    $count = 0;
    if ($link) {
        $sql = "
            SELECT column_name
            FROM   information_schema.columns
            WHERE  table_schema = '$db'
                   AND table_name = 'table_name'"; // Change the table_name your own table name
        $result = mysql_query($sql, $con);
        if (mysql_query($sql, $con)) {
            echo $sql . "<br> <br>";
            while ($row = mysql_fetch_row($result)) {
                echo "COLUMN " . ++$count . ": {$row[0]}<br>";
                $table_name = $row[0];
            }
            echo "<br>Total No. of COLUMNS: " . $count;
        } else {
            echo "Error in query.";
        }
    } else {
        echo "Database not found.";
    }
} else {
    echo "Connection Failed.";
}
?>

Prendre plaisir!


1
Veuillez poster la réponse réelle ici et n'utilisez votre résumé que comme sauvegarde / référence
ChrisF

0

mysqli fetch_field () a fonctionné pour moi:

if ($result = $mysqli -> query($sql)) {
  // Get field information for all fields
  while ($fieldinfo = $result -> fetch_field()) {
    printf("Name: %s\n", $fieldinfo -> name);
    printf("Table: %s\n", $fieldinfo -> table);
    printf("Max. Len: %d\n", $fieldinfo -> max_length);
  }
  $result -> free_result();
}

Source: https://www.w3schools.com/pHP/func_mysqli_fetch_field.asp

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.