MySQLでテーブルの列名を取得しますか?


301

mysqlでテーブルの列名を取得する方法はありますか?PHPを使用

回答:


537

DESCRIBEを使用できます。

DESCRIBE my_table;

または、新しいバージョンではINFORMATION_SCHEMAを使用できます。

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

または、SHOW COLUMNSを使用できます。

SHOW COLUMNS FROM my_table;

14
DESCRIBE実際のSHOW COLUMNS(のショートカットですdev.mysql.com/doc/refman/5.0/en/describe.html
svens

11
この構文はほとんどの主要なデータベースでサポートされているため、私はInformation_Schemaバージョンに投票します。必要に応じて、片道のみを学ぶのが最善です。
Kibbee、2009年

3
+1列が存在するテーブル名を選択したかったSELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'db_name' AND COLUMN_NAME = 'col_name';
AL̲̳I

2
desc my_table;:-) を使用してバイトを節約する
AlfonsoPérez

3
DESCforはDESC、降順と混同される可能性があります。読みやすさの欠如のために保存する名目上のバイト数は、それだけの価値はありません。
ジャックマシュー2017年

34

次のSQLステートメントはほぼ同等です。

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

リファレンス:INFORMATION_SCHEMA COLUMNS


1
なぜ「ほぼ」と言うのですか?
Pacerier、2015

2
@Pacerier 1つ目の理由は、2つ目はサブクエリとして機能しないことです。
WAF

@WAF、私は彼がそれ以外に何か他のものを意味したと思います。
Pacerier、2015

2
私の簡単なテストでSHOW COLUMNSは、列名や型などを含むテーブルをSELECT COLUMN NAME返し、列名だけを返します。
mwfearnley

20

すべての列名を単純な配列で返すPDO関数を作成しました。

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

出力は配列になります:

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

ネクロは申し訳ありませんが、私は私の機能が好きです;)

PS私はクラスCoreを含めていませんが、独自のクラスを使用できます。DS


大文字フェチとは何ですか?
Pacerier、2015

Stack Overflowの古い質問に答えても何も問題はありません。
bdsl 2015

1
ありがとう。出力では、次のように使用しました:$ columns = $ stmt-> fetchAll(\ PDO :: FETCH_ASSOC); array_column($ columns、 'COLUMN_NAME');を返します。
Ehsan 2016年

6

このソリューションはコマンドラインmysqlからのものです

mysql>USE information_schema;

以下のクエリでは、<-DATABASE_NAME->をデータベースに、<-TABLENAME->をDESCRIBEステートメントのフィールド値が必要なテーブル名に変更するだけです。

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


4

これはどう:

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

それはあなたが使用できることに注意することも興味深い
EXPLAIN table_nameと同義であるDESCRIBE table_nameSHOW COLUMNS FROM table_nameEXPLAINより一般的にクエリ実行プランについての情報を取得するために使用されます。



3

MySQL関数の記述テーブルを使用すると、目的の場所に移動できます(テーブル名を「テーブル」に入力します)。出力をいくつか解析する必要がありますが、それは非常に簡単です。私が覚えているように、そのクエリを実行すると、通常はキーと値のペアを提供する関数にアクセスするPHPクエリの結果には、キーとして列名が含まれます。しかし、私がPHPを使用してからしばらく経っているので、そのことに気を取られないでください。:)


いくつかのかなり良いドキュメントは内php.netでありus3.php.net/manual/en/function.mysql-list-fields.php
dannysauer

3

次のようにmysql_fetch_array()、をチェックアウトすることもできます。

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

3

他の回答が連想配列を返すので、私はフラット配列として列名が必要だったので、私は使用しました:

$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は次と等しくなります:

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

2

mysql_list_fieldsこの関数は、あなたが興味かもしれません。しかし、マニュアルが述べているように:

この関数は非推奨です。代わりにmysql_query()SQL SHOW COLUMNS FROM table [LIKE 'name']ステートメントの発行に使用することをお勧めします。


サーバーにSQLクエリを発行しない場合、関数はどのように機能しますか?なぜ廃止されるのですか?
Pacerier、2015

2

次の簡単なコマンドを使用して、テーブル構造全体を取得できます。

DESC TableName

または、次のクエリを使用できます。

SHOW COLUMNS FROM TableName

2

mysqlで、キーワードまたはクエリに従って列の詳細とテーブル構造を取得する

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
今後のユーザーにとってさらに役立つように、コードダンプだけでなく、回答のコンテキストを提供してください。
Paul Zahra 2017年

1

これは私のために働いた。

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

1

PHPを介してテーブルの列を取得する単純な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.";
}
?>

楽しい!


1
ここに実際の回答を投稿し、要点をバックアップ/参照としてのみ使用してください
ChrisF

0

mysqli fetch_field()は私のために働きました:

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

ソース:https : //www.w3schools.com/pHP/func_mysqli_fetch_field.asp

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.