MySQL에서 테이블 열 이름을 가져 오시겠습니까?


300

mysql에서 테이블의 열 이름을 가져 오는 방법이 있습니까? PHP를 사용하여

답변:


536

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
SHOW 열에 대한 바로 가기 (실제로 DESCRIBE dev.mysql.com/doc/refman/5.0/en/describe.html가 )
svens

11
이 구문은 대부분의 주요 데이터베이스에서 지원되므로 Information_Schema 버전에 투표합니다. 필요한 경우 한 가지 방법 만 배우는 것이 가장 좋습니다.
Kibbee

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;:-)
알폰소 페레스

3
DESC설명은 DESC내림차순 으로 쉽게 혼동 될 수 있습니다 . 가독성이 부족하여 절약 할 수있는 공칭 바이트 수는 그만한 가치가 없습니다.
Jacques Mathieu

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 2012

2
@Pacerier 우선, 두 번째는 하위 쿼리로 작동하지 않습니다.
WAF

@ WAF, 나는 그가 아닌 다른 것을 의미한다고 생각합니다.
Pacerier

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

necro는 미안하지만 내 기능이 마음에 든다.)

추신 : 나는 수업 코어를 포함하지 않았지만 자신의 수업을 사용할 수 있습니다 .. DS


대문자 페티쉬는 무엇입니까?
Pacerier

스택 오버플로에 대한 오래된 질문에 대답하는 데 아무런 문제가 없습니다.
bdsl

1
감사. 출력에 대해 다음과 같이 사용했습니다. $ columns = $ stmt-> fetchAll (\ PDO :: FETCH_ASSOC); 반환 array_column ($ columns, 'COLUMN_NAME');
Ehsan

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_name하고 SHOW COLUMNS FROM table_name 있지만, EXPLAIN 더 일반적으로 쿼리 실행 계획에 대한 정보를 얻는 데 사용됩니다.



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

2

다음과 같은 간단한 명령을 사용하여 전체 테이블 구조를 얻을 수 있습니다.

DESC TableName

또는 다음 쿼리를 사용할 수 있습니다.

SHOW COLUMNS FROM TableName

2

mysql에서 키워드 또는 쿼리를 따라 열 세부 정보 및 테이블 구조를 가져옵니다.

1.DESC table_name

2.DESCRIBE table_name

삼.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

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.