Ottieni i nomi delle colonne delle tabelle in MySQL?


301

C'è un modo per afferrare il nome delle colonne di una tabella in mysql? usando php

Risposte:


537

Puoi usare DESCRIBE :

DESCRIBE my_table;

O nelle versioni più recenti puoi utilizzare INFORMATION_SCHEMA :

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

Oppure puoi usare MOSTRA COLONNE :

SHOW COLUMNS FROM my_table;

14
DESCRIBE è in realtà una scorciatoia per SHOW COLUMNS ( dev.mysql.com/doc/refman/5.0/en/describe.html )
svens,

11
Vorrei votare per la versione Information_Schema, poiché questa sintassi è supportata dalla maggior parte dei database principali. Meglio imparare solo 1 modo se devi.
Kibbee,

3
+1 Volevo selezionare i nomi delle tabelle in cui esisteva una colonnaSELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'db_name' AND COLUMN_NAME = 'col_name';
AL̲̳I

2
salva byte usando desc my_table;:-)
Alfonso Pérez,

3
DESCper descrivere può essere facilmente confuso con DESCper discendente. La quantità nominale di byte salvati per mancanza di leggibilità non vale la pena.
Jacques Mathieu,

34

Le seguenti istruzioni SQL sono quasi equivalenti:

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

Riferimento: INFORMATION_SCHEMA COLUMNS


1
Perché dici "quasi"?
Pacerier,

2
@Pacerier Per prima cosa, la seconda non funzionerà come una sottoquery.
WAF

@WAF, penso che volesse dire qualcos'altro, non quello.
Pacerier,

2
Nel mio test rapido, SHOW COLUMNSrestituisce una tabella contenente i nomi delle colonne, i tipi, ecc., Mentre SELECT COLUMN NAMErestituisce solo i nomi delle colonne.
mwfearnley,

20

Ho creato una funzione DOP che restituisce tutti i nomi di colonna in un semplice array.

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

L'output sarà un array:

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

Scusate il necro ma mi piace la mia funzione;)

PS Non ho incluso la classe Core ma puoi usare la tua classe .. DS


Cos'è il feticcio maiuscolo?
Pacerier,

Non c'è niente di sbagliato nel rispondere a una vecchia domanda su StackTranslate.it.
bdsl,

1
Grazie. Per l'output ho usato in questo modo: $ colonne = $ stmt-> fetchAll (\ PDO :: FETCH_ASSOC); return array_column ($ colonne, "COLUMN_NAME");
Ehsan,

6

Questa soluzione proviene dalla riga di comando mysql

mysql>USE information_schema;

Nella query seguente basta cambiare <--DATABASE_NAME--> nel database e <--TABLENAME--> nel nome della tabella in cui si desidera solo i valori dei campi dell'istruzione DESCRIBE

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

4

C'è anche questo se preferisci:

mysql_query('SHOW COLUMNS FROM tableName'); 

4

Cosa ne pensi di questo:

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

È anche interessante notare che è possibile utilizzare ciò
EXPLAIN table_nameche è sinonimo di DESCRIBE table_namee SHOW COLUMNS FROM table_name sebbene EXPLAIN sia più comunemente usato per ottenere informazioni sul piano di esecuzione della query.



3

La funzione MySQL descrivi la tabella dovrebbe portarti dove vuoi andare (inserisci il nome della tua tabella per "tabella"). Dovrai analizzare un po 'l'output, ma è abbastanza facile. Come ricordo, se esegui quella query, il risultato della query PHP accedendo a funzioni che normalmente ti darebbero una coppia chiave-valore avrà i nomi delle colonne come chiavi. Ma è da un po 'che non uso PHP, quindi non trattenermi. :)


Ci sono alcuni buoni documenti su php.net in us3.php.net/manual/en/function.mysql-list-fields.php
dannysauer,

3

Puoi anche provare mysql_fetch_array(), come in:

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

3

Avevo bisogno di nomi di colonne come array flat, mentre le altre risposte restituivano array associativi, quindi ho usato:

$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 ora è uguale a:

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

2

La mysql_list_fieldsfunzione potrebbe interessarti; ma, come afferma il manuale:

Questa funzione è obsoleta. È preferibile utilizzare invece mysql_query()l'emissione di SHOW COLUMNS FROM table [LIKE 'name']un'istruzione SQL .


Come funziona la funzione se non invia una query SQL al server? Perché è deprecato?
Pacerier,

2

puoi ottenere l'intera struttura della tabella usando il semplice comando seguente.

DESC TableName

oppure puoi usare la seguente query.

SHOW COLUMNS FROM TableName

2

in mysql per ottenere i dettagli delle colonne e la struttura della tabella seguendo le parole chiave o le query

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
Per essere più utile ai futuri utenti potresti fornire un contesto per la tua risposta, non solo un dump del codice.
Paul Zahra,

1

questo ha funzionato per me ..

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

1

Ho scritto un semplice script php per recuperare le colonne della tabella tramite 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.";
}
?>

Godere!


1
Si prega di pubblicare la risposta effettiva qui e utilizzare solo l'essenza come backup / riferimento
ChrisF

0

mysqli fetch_field () ha funzionato per me:

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

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.