Dapatkan nama kolom tabel di MySQL?


301

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

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;

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


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


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

4

Ada juga ini jika Anda lebih suka:

mysql_query('SHOW COLUMNS FROM tableName'); 

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;

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.



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. :)


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

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
)

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.


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

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


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

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!


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.