MySQL'de tablo sütun adları alınıyor mu?


301

MySQL'de bir tablonun sütun adını kapmak için bir yolu var mı? php kullanma

Yanıtlar:


537

DESCRIBE uygulamasını kullanabilirsiniz :

DESCRIBE my_table;

Ya yeni sürümlerinde kullanabileceğiniz INFORMATION_SCHEMA :

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

Veya SHOW COLUMNS kullanabilirsiniz :

SHOW COLUMNS FROM my_table;

14
DESCRIBE aslında SHOW COLUMNS ( dev.mysql.com/doc/refman/5.0/en/describe.html ) için bir kısayoldur
svens

11
Bu sözdizimi çoğu büyük veritabanı tarafından desteklendiğinden, Information_Schema sürümü için oy verirdim. Gerekirse sadece 1 yol öğrenmek en iyisidir.
Kibbee

3
+1 Bir sütunun var olduğu tablo adlarını seçmek istedimSELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'db_name' AND COLUMN_NAME = 'col_name';
AL̲̳I

2
kaydetme kullanarak bayt desc my_table;:-)
Alfonso Pérez

3
DESCaçıklama DESCiçin inmek için kolayca karıştırılabilir . Okunabilirlik eksikliği nedeniyle kaydettiğiniz nominal bayt miktarı buna değmez.
Jacques Mathieu

34

Aşağıdaki SQL ifadeleri neredeyse eşdeğerdir:

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

Referans: BİLGİ_SCHEMA KOLONLARI


1
Neden "neredeyse" diyorsun?
Pacerier

2
@Pacerier Bir kere, ikincisi bir alt sorgu olarak çalışmaz.
WAF

@WAF, sanırım tamamen başka bir şey ifade ediyordu, öyle değil.
Pacerier

2
Hızlı testimde, SHOW COLUMNSsütun adlarını, türlerini vb. İçeren bir tablo SELECT COLUMN NAMEdöndürürken, yalnızca sütun adlarını döndürür.
mwfearnley

20

Basit bir dizide tüm sütun adlarını döndüren bir PDO işlevi yaptım.

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

Çıktı bir dizi olacaktır:

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

Necro için özür dilerim ama işlevimi beğendim;)

PS Ben Core sınıf dahil etmedim ama kendi sınıfını kullanabilirsiniz .. DS


Büyük harf fetişinde ne var?
Pacerier

Stack Overflow ile ilgili eski bir soruyu cevaplamanın yanlış bir yanı yok.
bdsl

1
Teşekkürler. Çıktı için şu şekilde kullandım: $ column = $ stmt-> fetchAll (\ PDO :: FETCH_ASSOC); array_column döndür ($ sütun, 'COLUMN_NAME');
Ehsan

6

Bu çözüm mysql komut satırından

mysql>USE information_schema;

Aşağıdaki sorguda <--DATABASE_NAME--> öğesini veritabanınıza ve <--TABLENAME--> değerini yalnızca DESCRIBE ifadesinin Alan değerlerini istediğiniz tablo adınıza değiştirin

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


4

Buna ne dersin:

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

Size kullanabileceğiniz göz önünde bulundurmak da ilginç
EXPLAIN table_nameile eşanlamlı olan DESCRIBE table_nameve SHOW COLUMNS FROM table_name her ne AÇIKLAMAK daha yaygın sorgu yürütme planı hakkında bilgi elde etmek için kullanılır.



3

MySQL işlevi açıklama tablosu sizi istediğiniz yere götürmelidir (tablo adınızı "table" için girin). Çıkışı biraz ayrıştırmanız gerekecek, ancak oldukça kolay. Hatırladığım gibi, bu sorguyu yürütürseniz, normalde size bir anahtar / değer çifti verecek olan işlevlere erişen PHP sorgu sonucu, anahtar olarak sütun adlarına sahip olacaktır. Ama PHP kullandığımdan bu yana bir süre geçti, bu yüzden beni buna tutmayın. :)


İçinde php.net bazı oldukça iyi dokümanlar vardır us3.php.net/manual/en/function.mysql-list-fields.php
dannysauer

3

Ayrıca mysql_fetch_array(), aşağıdaki gibi check-out yapmak isteyebilirsiniz :

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

3

Diğer cevaplar ilişkisel diziler döndürürken, düz bir dizi olarak sütun adlarına ihtiyacım vardı, bu yüzden kullandım:

$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 artık şuna eşit:

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

2

mysql_list_fieldsFonksiyon ilginizi çekebilecek; ancak kılavuzda belirtildiği gibi:

Bu işlev kullanımdan kaldırılmıştır. Bunun yerine mysql_query()bir SQL SHOW COLUMNS FROM table [LIKE 'name']deyimi vermek tercih edilir.


İşlev sunucuya SQL sorgusu vermezse nasıl çalışır? Neden reddediliyor?
Pacerier

2

aşağıdaki basit komutu kullanarak tüm tablo yapısını alabilirsiniz.

DESC TableName

veya aşağıdaki sorguyu kullanabilirsiniz.

SHOW COLUMNS FROM TableName

2

anahtar kelimeleri veya sorguları izleyerek sütun ayrıntılarını ve tablo yapısını almak için

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
Gelecekteki kullanıcılara daha fazla yardımcı olmak için, lütfen sadece bir kod dökümü değil, cevabınız için bir bağlam sağlayabilir misiniz?
Paul Zahra

1

bu benim için çalıştı.

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

1

PHP ile tablo sütunları getirmek için basit bir php komut dosyası var: 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.";
}
?>

Zevk almak!


1
Lütfen asıl cevabı buraya gönderin ve sadece yedek / referans olarak
gistinizi

0

mysqli fetch_field () benim için çalıştı:

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

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.