Dapatkan nama kolom tabel di MySQL?

301

Apakah ada cara untuk mengambil nama kolom dari tabel di mysql? menggunakan php

Seorang pegawai
sumber

Jawaban:

537

Anda dapat menggunakan DESCRIBE :

DESCRIBE my_table;

Atau dalam versi yang lebih baru Anda dapat menggunakan INFORMATION_SCHEMA :

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

Atau Anda dapat menggunakan SHOW COLUMNS :

SHOW COLUMNS FROM my_table;
Greg
sumber
14
DESCRIBE sebenarnya adalah jalan pintas untuk SHOW COLUMNS ( dev.mysql.com/doc/refman/5.0/en/describe.html )
svens
11
Saya akan memilih versi Information_Schema, karena sintaks ini didukung oleh sebagian besar database utama. Yang terbaik hanya belajar 1 cara jika Anda harus.
Kibbee
3
+1 Saya ingin memilih nama tabel di mana ada kolom yang saya lakukanSELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'db_name' AND COLUMN_NAME = 'col_name';
AL'I
2
simpan byte dengan menggunakan desc my_table;:-)
Alfonso Pérez
3
DESCuntuk menggambarkan dapat dengan mudah dikacaukan dengan DESCuntuk turun. Jumlah nominal byte yang Anda simpan karena kurangnya keterbacaan tidak sepadan.
Jacques Mathieu
34

Pernyataan SQL berikut ini hampir setara:

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

Referensi: INFORMATION_SCHEMA COLUMNS

OMG Ponies
sumber
1
Mengapa Anda mengatakan "hampir"?
Pacerier
2
@Pacerier Untuk satu hal, yang kedua tidak akan berfungsi sebagai subquery.
WAF
@ WAF, saya pikir dia berarti sesuatu yang lain, bukan itu.
Pacerier
2
Dalam pengujian cepat saya, SHOW COLUMNSmengembalikan tabel yang berisi nama kolom, tipe, dll, sementara SELECT COLUMN NAMEhanya mengembalikan nama kolom.
mwfearnley
20

Saya membuat fungsi PDO yang mengembalikan semua nama kolom dalam array sederhana.

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

Outputnya berupa array:

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

Maaf untuk necro tapi saya suka fungsi saya;)

PS Saya belum termasuk kelas Core tetapi Anda dapat menggunakan kelas Anda sendiri .. DS

Philip
sumber
Ada apa dengan jimat huruf besar?
Pacerier
Tidak ada yang salah dengan menjawab pertanyaan lama tentang Stack Overflow.
bdsl
1
Terima kasih. Untuk hasilnya saya menggunakan cara ini: $ kolom = $ stmt-> fetchAll (\ PDO :: FETCH_ASSOC); return array_column ($ kolom, 'COLUMN_NAME');
Ehsan
6

Solusi ini dari command line mysql

mysql>USE information_schema;

Dalam kueri di bawah ini, ubah saja <--DATABASE_NAME--> ke database Anda dan <--TABLENAME--> ke nama tabel Anda di mana Anda hanya ingin nilai Field dari pernyataan DESCRIBE

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

Ada juga ini jika Anda lebih suka:

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

Bagaimana dengan ini:

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
sumber
4

Menarik juga untuk dicatat bahwa Anda dapat menggunakan
EXPLAIN table_namemana yang identik dengan DESCRIBE table_namedan SHOW COLUMNS FROM table_name meskipun EXPLAIN lebih umum digunakan untuk mendapatkan informasi tentang rencana eksekusi permintaan.

AnthonyS
sumber
3

Memeriksa:

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

Tabel uraian fungsi MySQL akan membawa Anda ke tempat yang Anda tuju (masukkan nama tabel Anda untuk "tabel") Anda harus mem-parsing output beberapa, tetapi cukup mudah. Seingat saya, jika Anda menjalankan kueri itu, hasil kueri PHP yang mengakses fungsi yang biasanya memberi Anda pasangan nilai-kunci akan memiliki nama kolom sebagai kuncinya. Tapi sudah lama sejak saya menggunakan PHP jadi jangan pegang saya untuk itu. :)

dannysauer
sumber
Ada beberapa dokumen yang cukup bagus di php.net us3.php.net/manual/en/function.mysql-list-fields.php
dannysauer
3

Anda mungkin juga ingin check out mysql_fetch_array(), seperti pada:

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

Saya membutuhkan nama kolom sebagai array datar, sedangkan jawaban lainnya mengembalikan array asosiatif, jadi saya menggunakan:

$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 sekarang sama dengan:

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

The mysql_list_fieldsFungsi mungkin menarik bagi Anda; tetapi, seperti yang dinyatakan dalam manual:

Fungsi ini sudah usang. Lebih baik digunakan mysql_query()untuk mengeluarkan SHOW COLUMNS FROM table [LIKE 'name']pernyataan SQL sebagai gantinya.

Pascal MARTIN
sumber
Bagaimana cara kerjanya jika tidak mengeluarkan query SQL ke server? Mengapa itu ditinggalkan?
Pacerier
2

Anda bisa mendapatkan seluruh struktur tabel menggunakan perintah sederhana berikut.

DESC TableName

atau Anda dapat menggunakan kueri berikut.

SHOW COLUMNS FROM TableName
Harish Kumar
sumber
2

di mysql untuk mendapatkan detail kolom dan struktur tabel dengan mengikuti kata kunci atau kueri

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
sumber
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
sumber
1
Agar lebih bermanfaat bagi pengguna di masa mendatang, tolong berikan konteks untuk jawaban Anda, bukan hanya dump kode.
Paul Zahra
1

ini bekerja untuk saya ..

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

Saya telah menulis skrip php sederhana untuk mengambil kolom tabel melalui 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.";
}
?>

Nikmati!

Syekh Hussnain
sumber
1
Silakan kirim jawaban yang sebenarnya di sini dan hanya gunakan inti Anda sebagai cadangan / referensi
ChrisF
0

mysqli fetch_field () bekerja untuk saya:

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

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

David M.
sumber