Obtener nombres de columna de tabla en MySQL?

301

¿Hay alguna manera de obtener el nombre de las columnas de una tabla en mysql? usando php

Un empleado
fuente

Respuestas:

537

Puedes usar DESCRIBE :

DESCRIBE my_table;

O en versiones más recientes puede usar INFORMATION_SCHEMA :

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

O puede usar SHOW COLUMNS :

SHOW COLUMNS FROM my_table;
Greg
fuente
14
DESCRIBE es en realidad un acceso directo para SHOW COLUMNS ( dev.mysql.com/doc/refman/5.0/en/describe.html )
svens
11
Yo votaría por la versión Information_Schema, ya que esta sintaxis es compatible con la mayoría de las principales bases de datos. Lo mejor es aprender de 1 manera si es necesario.
Kibbee el
3
+1 Quería seleccionar los nombres de las tablas donde existe una columna que hiceSELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'db_name' AND COLUMN_NAME = 'col_name';
AL̲̳I
2
guardar bytes usando desc my_table;:-)
Alfonso Pérez
3
DESCpara describir puede confundirse fácilmente con DESCpara descender. La cantidad nominal de bytes que guarda por falta de legibilidad no vale la pena.
Jacques Mathieu
34

Las siguientes instrucciones SQL son casi equivalentes:

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

Referencia: INFORMACIÓN_ COLUMNAS DE ESQUEMA

Ponis OMG
fuente
1
¿Por qué dices "casi"?
Pacerier
2
@Pacerier Por un lado, el segundo no funcionará como una subconsulta.
WAF
@WAF, creo que quiso decir algo completamente diferente, no eso.
Pacerier
2
En mi prueba rápida, SHOW COLUMNSdevuelve una tabla que contiene los nombres de columna, tipos, etc., mientras que SELECT COLUMN NAMEsolo devuelve los nombres de columna.
mwfearnley
20

Hice una función PDO que devuelve todos los nombres de columna en una matriz 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 salida será una matriz:

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

Perdón por el necro pero me gusta mi función;)

PD: No he incluido la clase Core pero puedes usar tu propia clase. DS

Philip
fuente
¿Qué pasa con el fetiche de mayúsculas?
Pacerier
No hay nada de malo en responder una vieja pregunta sobre Stack Overflow.
bdsl
1
Gracias. Para el resultado que utilicé de esta manera: $ columnas = $ stmt-> fetchAll (\ PDO :: FETCH_ASSOC); return array_column ($ columnas, 'COLUMN_NAME');
Ehsan
6

Esta solución es de la línea de comando mysql

mysql>USE information_schema;

En la consulta a continuación, simplemente cambie <--DATABASE_NAME--> a su base de datos y <--TABLENAME--> a su nombre de tabla donde solo desea Valores de campo de la declaración DESCRIBE

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

También hay esto si lo prefieres:

mysql_query('SHOW COLUMNS FROM tableName'); 
James Goodwin
fuente
4

Qué tal esto:

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

También es interesante observar que puede usar el
EXPLAIN table_namecual es sinónimo DESCRIBE table_namey SHOW COLUMNS FROM table_name aunque EXPLAIN se usa más comúnmente para obtener información sobre el plan de ejecución de consultas.

AnthonyS
fuente
3

Examinar:

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

La tabla de descripción de la función MySQL debería llevarlo a donde desea ir (ponga el nombre de su tabla para "tabla"). Tendrá que analizar un poco la salida, pero es bastante fácil. Como recuerdo, si ejecuta esa consulta, el resultado de la consulta PHP al acceder a funciones que normalmente le darían un par clave-valor tendrá los nombres de columna como las claves. Pero ha pasado un tiempo desde que usé PHP, así que no me obligue a eso. :)

dannysauer
fuente
Hay algunos documentos bastante buenos en php.net dentro de us3.php.net/manual/en/function.mysql-list-fields.php
dannysauer
3

Es posible que también desee visitar mysql_fetch_array(), como en:

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

Necesitaba nombres de columna como una matriz plana, mientras que las otras respuestas devolvieron matrices asociativas, así que usé:

$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 ahora es igual a:

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

La mysql_list_fieldsfunción puede interesarle; pero, como dice el manual:

Esta función está en desuso. Es preferible utilizar mysql_query()para emitir una SHOW COLUMNS FROM table [LIKE 'name']declaración SQL en su lugar.

Pascal MARTIN
fuente
¿Cómo funciona la función si no emite una consulta SQL al servidor? ¿Por qué está en desuso?
Pacerier
2

puede obtener toda la estructura de la tabla usando el siguiente comando simple.

DESC TableName

o puede usar la siguiente consulta.

SHOW COLUMNS FROM TableName
Harish Kumar
fuente
2

en mysql para obtener detalles de columnas y estructura de tablas siguiendo palabras clave o consultas

1)DESC table_name

2)DESCRIBE table_name

3)SHOW COLUMNS FROM table_name

4)SHOW create table table_name;

5)EXPLAIN table_name

denny
fuente
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);
}
ibRQD
fuente
1
Para ser más útil para los futuros usuarios, ¿podría proporcionar algún contexto para su respuesta, no solo un volcado de código?
Paul Zahra
1

esto funcionó para mí ...

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

Escribí un script php simple para buscar columnas de tabla a través de 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.";
}
?>

¡Disfrutar!

Jeque Hussnain
fuente
1
Publique
0

mysqli fetch_field () funcionó para mí:

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

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

David M
fuente