Obțineți numele coloanelor de tabel în MySQL? (Programare, Php, Sql, Mysql)

Un angajat a intrebat.

Există o modalitate de a obține numele coloanelor unui tabel în mysql?folosind php

19 răspunsuri
Greg

Puteți utiliza DESCRIBE:

DESCRIBE my_table;

Sau, în versiunile mai noi, puteți utiliza INFORMATION_SCHEMA:

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

Sau puteți utiliza AFIȘAȚI COLUMNELE:

SHOW COLUMNS FROM my_table;

Sau pentru a obține numele coloanelor cu virgulă pe o linie:

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

Comentarii

    18

  • DESCRIBE este de fapt o prescurtare pentru SHOW COLUMNS (dev.mysql.com/doc/refman/5.0/en/describe.html) –  > Por svens.
  • Aș vota pentru versiunea Information_Schema, deoarece această sintaxă este susținută de majoritatea bazelor de date importante. Cel mai bine este să învățați doar 1 singur mod, dacă este necesar. –  > Por Kibbee.
  • +1 Am vrut să selectez numele tabelelor în care există o coloană am făcut SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'db_name' AND COLUMN_NAME = 'col_name'; –  > Por AL̲̳I.
  • economisiți octeți utilizând desc my_table; 🙂 –  > Por Alfonso Pérez.
  • DESC pentru a descrie poate fi ușor confundat cu DESC pentru coborâre. Cantitatea nominală de octeți pe care o economisiți pentru lipsa de lizibilitate nu merită. –  > Por Jacques Mathieu.
OMG Ponei

Următoarele instrucțiuni SQL sunt aproape echivalente:

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

Referință: COLOANE INFORMATION_SCHEMA

Comentarii

  • De ce spui „aproape”? –  > Por Pacerier.
  • @Pacerier În primul rând, a doua nu va funcționa ca o subîntrebare. –  > Por WAF.
  • @WAF, cred că se referea la cu totul altceva, nu la asta. –  > Por Pacerier.
  • În testul meu rapid, SHOW COLUMNS returnează un tabel care conține numele coloanelor, tipurile, etc., în timp ce SELECT COLUMN NAME returnează doar numele coloanelor. –  > Por mwfearnley.
Philip

Am realizat o funcție PDO care returnează toate numele coloanelor într-un array simplu.

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

Ieșirea va fi un array:

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

Îmi pare rău pentru necro, dar îmi place funcția mea 😉

P.S. Nu am inclus clasa Core, dar puteți folosi propria clasă… D.S.

Comentarii

  • Ce-i cu fetișul cu majusculele? –  > Por Pacerier.
  • Nu este nimic rău în a răspunde la o întrebare veche pe Stack Overflow. –  > Por bdsl.
  • Mulțumesc. Pentru ieșire am folosit acest mod: $columns = $stmt->fetchAll(PDO::FETCH_ASSOC); return array_column($columns, ‘COLUMN_NAME’); – -.  > Por Ehsan.
leela

Această soluție este din linia de comandă mysql

mysql>USE information_schema;

În interogarea de mai jos, schimbați doar <–DATABASE_NAME–> în baza de date și <–TABLENAME–> în numele tabelului în care doriți doar valorile câmpului din declarația DESCRIBE

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

AnthonyS

De asemenea, este interesant de remarcat că puteți utiliza
EXPLAIN table_name care este sinonimă cu DESCRIBE table_name și SHOW COLUMNS FROM table_namedeși EXPLAIN este utilizat mai frecvent pentru a obține informații despre planul de execuție al interogării.

James Goodwin

Există și aceasta, dacă preferați:

mysql_query('SHOW COLUMNS FROM tableName'); 

Wolf Metzner

Ce ziceți de asta:

SELECT @cCommand := GROUP_CONCAT( COLUMN_NAME ORDER BY column_name SEPARATOR ',
')
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;

Andy Hume

Uită-te în:

mysql_query('DESCRIBE '.$table);

dannysauer

Funcția MySQLdescribe tables ar trebui să vă ducă acolo unde doriți să ajungeți (puneți numele tabelului dvs. în loc de „table”). Va trebui să analizați puțin rezultatul, dar este destul de ușor. Din câte îmi amintesc, dacă executați această interogare, rezultatul interogării PHP care accesează funcțiile care în mod normal v-ar da o pereche cheie-valoare va avea ca și chei numele coloanelor. Dar a trecut ceva timp de când nu am mai folosit PHP, așa că nu mă țineți la curent cu asta. 🙂

Comentarii

Pascal MARTIN

The mysql_list_fields ar putea să vă intereseze ; dar, așa cum scrie în manual :

Această funcție este depreciată. Este de preferat să se utilizeze mysql_query() pentru a emite un SQL SHOW COLUMNS FROM table [LIKE 'name'] în locul acesteia.

Comentarii

  • Cum funcționează funcția dacă nu emite o interogare SQL către server? De ce este depreciată? –  > Por Pacerier.
thewebguy

De asemenea, ați putea dori să consultați mysql_fetch_array(), , ca în:

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

duhaime

Aveam nevoie de nume de coloane ca un array plat, în timp ce celelalte răspunsuri au returnat array-uri asociative, așa că am folosit:

$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_name acum este egal cu:

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

Harish Kumar

puteți obține întreaga structură a tabelului folosind următoarea comandă simplă.

DESC TableName

sau puteți utiliza următoarea interogare.

SHOW COLUMNS FROM TableName

denny

în mysql pentru a obține detalii despre coloane și structura tabelului prin următoarele cuvinte cheie sau interogări

1.DESC table_name

2.DESCRIBE table_name

3.SHOW COLUMNS FROM table_name

4.SHOW create table table_name;

5.EXPLAIN table_name

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

Comentarii

  • Pentru a fi mai util pentru viitorii utilizatori, ați putea să oferiți un context pentru răspunsul dvs., nu doar o simplă expunere de cod. –  > Por Paul Zahra.
Ad Kahn

acest lucru a funcționat pentru mine…

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

Hussnain Sheikh

Am scris un script php simplu pentru a prelua coloanele tabelului prin 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.";
}
?>

Bucurați-vă!

Comentarii

  • Vă rugăm să postați răspunsul real aici și să folosiți gistul dvs. doar ca o copie de rezervă/referință –  > Por ChrisF.
David M

mysqli fetch_field() a funcționat pentru mine:

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

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

thundorstorm

Modul simplu, dacă încărcați rezultatele folosind assoc este să faceți acest lucru:

$sql = "SELECT p.* FROM (SELECT 1) as dummy LEFT JOIN `product_table` p on null";
$q = $this->db->query($sql);
$column_names = array_keys($q->row);

Acest lucru se încarcă un singur rezultat folosind această interogare, veți obține un array cu numele coloanelor din tabel ca chei și null ca valoare.De ex.

Array(
'product_id' => null,
'sku' => null,
'price' => null,
...
)

după care puteți obține cu ușurință numele coloanelor tabelului folosind funcția php array_keys($result)

Tags:, ,