web-dev-qa-db-ja.com

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

MySQLのテーブルの列名を取得する方法はありますか? phpを使う

259
An employee

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;
476
Greg

次の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

34
OMG Ponies

単純な配列ですべての列名を返す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
... )

ネクロですみませんが、私は自分の機能が好きです;)

P.S私はコアクラスを含めていませんが、あなたはあなた自身のクラスを使うことができます。

20
Philip

この解決策は、コマンドラインmysqlからのものです。

mysql>USE information_schema;

以下のクエリでは、<-- DATABASE_NAME - >をあなたのデータベースに、<-- TABLENAME-->をあなたのテーブル名に変更してください。

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

これはどう:

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;
5
Wolf Metzner

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

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

あなたが使用できることに注意することも興味深いです
EXPLAIN table_nameは、DESCRIBE table_nameおよびSHOW COLUMNS FROM table_nameと同義ですが、 EXPLAIN は、クエリ実行プランに関する情報を取得するためによく使用されます。

3
AnthonyS

見てください:

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

MySQLの関数describe tableを使用すると、目的の場所に移動できます(テーブル名を "table"に入力します)。出力を解析する必要がありますが、それはかなり簡単です。私が思い出したように、あなたがそのクエリを実行すると、PHPクエリの結果は通常あなたにキーと値のペアを与える関数にアクセスすることがキーとしてカラム名を持つでしょう。しかし、私がPHPを使ってからしばらく時間が経ったので、それを私に抱かないでください。 :)

3
dannysauer

あなたが好めばこれもあります:

mysql_query('SHOW COLUMNS FROM tableName'); 
3
James Goodwin
$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);
}
2
ibRQD

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

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

2
Pascal MARTIN

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

$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
duhaime

これは私のために働きました..

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

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

DESC TableName

あるいは、次のようなクエリを使うことができます。

SHOW COLUMNS FROM TableName
1
Harish Kumar

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

1
denny

私はPHPを介してテーブルの列を取得するための簡単なphpスクリプトを書きました: Show_table_columns.php

楽しい!

1
Hussnain sheikh