MySQLのテーブルの列名を取得する方法はありますか? phpを使う
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;
次の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']
単純な配列ですべての列名を返す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私はコアクラスを含めていませんが、あなたはあなた自身のクラスを使うことができます。
この解決策は、コマンドラインmysqlからのものです。
mysql>USE information_schema;
以下のクエリでは、<-- DATABASE_NAME - >をあなたのデータベースに、<-- TABLENAME-->をあなたのテーブル名に変更してください。
mysql> SELECT COLUMN_NAME FROM COLUMNS WHERE TABLE_SCHEMA = '<--DATABASE_NAME-->' AND TABLE_NAME='<--TABLENAME-->';
これはどう:
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;
次のようにmysql_fetch_array()
をチェックアウトすることもできます。
$rs = mysql_query($sql);
while ($row = mysql_fetch_array($rs)) {
//$row[0] = 'First Field';
//$row['first_field'] = 'First Field';
}
あなたが使用できることに注意することも興味深いですEXPLAIN table_name
は、DESCRIBE table_name
およびSHOW COLUMNS FROM table_name
と同義ですが、 EXPLAIN は、クエリ実行プランに関する情報を取得するためによく使用されます。
見てください:
mysql_query('DESCRIBE '.$table);
MySQLの関数describe tableを使用すると、目的の場所に移動できます(テーブル名を "table"に入力します)。出力を解析する必要がありますが、それはかなり簡単です。私が思い出したように、あなたがそのクエリを実行すると、PHPクエリの結果は通常あなたにキーと値のペアを与える関数にアクセスすることがキーとしてカラム名を持つでしょう。しかし、私がPHPを使ってからしばらく時間が経ったので、それを私に抱かないでください。 :)
あなたが好めばこれもあります:
mysql_query('SHOW COLUMNS FROM tableName');
$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);
}
mysql_list_fields
関数に興味があるかもしれません。しかし、マニュアルが述べるように:
この機能は非推奨です。代わりに
mysql_query()
を使用してSQLのSHOW COLUMNS FROM table [LIKE 'name']
ステートメントを発行することをお勧めします。
私はフラット配列として列名が必要でしたが、他の答えは連想配列を返したので、私は使用しました:
$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
)
これは私のために働きました..
$sql = "desc MyTableName";
$result = @mysql_query($sql);
while($row = @mysql_fetch_array($result)){
echo $row[0]."<br>";
}
次の簡単なコマンドを使ってテーブル構造全体を取得できます。
DESC TableName
あるいは、次のようなクエリを使うことができます。
SHOW COLUMNS FROM TableName
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
私はPHPを介してテーブルの列を取得するための簡単なphpスクリプトを書きました: Show_table_columns.php
楽しい!