Lấy tên cột bảng trong MySQL?


301

Có cách nào để lấy tên cột của một bảng trong mysql không? sử dụng php

Câu trả lời:


537

Bạn có thể sử dụng MÔ TẢ :

DESCRIBE my_table;

Hoặc trong các phiên bản mới hơn, bạn có thể sử dụng Information_SCHema :

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

Hoặc bạn có thể sử dụng SHOW COLUMNS :

SHOW COLUMNS FROM my_table;

14
MÔ TẢ thực sự là một lối tắt cho SHOW COLUMNS ( dev.mysql.com/doc/refman/5.0/en/describe.html )
svens

11
Tôi sẽ bỏ phiếu cho phiên bản Information_Schema, vì cú pháp này được hỗ trợ bởi hầu hết các cơ sở dữ liệu chính. Tốt nhất chỉ học 1 cách nếu bạn phải.
Kibbee

3
+1 Tôi muốn chọn tên bảng nơi tôi đã tồn tại một cộtSELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'db_name' AND COLUMN_NAME = 'col_name';
ALI

2
lưu byte bằng cách sử dụng desc my_table;:-)
Alfonso Pérez

3
DESCđể mô tả có thể dễ dàng nhầm lẫn với DESCgiảm dần. Số lượng byte danh nghĩa mà bạn lưu cho việc thiếu khả năng đọc là không đáng.
Jacques Mathieu

34

Các câu lệnh SQL sau gần tương đương nhau:

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

Tham khảo: THÔNG TIN CƠ SỞ


1
Tại sao bạn nói "gần"?
Pacerier 17/2/2015

2
@Pacerier Đối với một điều, điều thứ hai sẽ không hoạt động như một truy vấn phụ.
WAF

@WAF, tôi nghĩ anh ấy có ý gì khác hoàn toàn, không phải thế.
Pacerier

2
Trong thử nghiệm nhanh của tôi, SHOW COLUMNStrả về một bảng chứa tên cột, loại, v.v., trong khi SELECT COLUMN NAMEchỉ trả về tên cột.
mwfearnley

20

Tôi đã tạo một hàm PDO trả về tất cả các tên cột trong một mảng đơn giản.

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

Đầu ra sẽ là một mảng:

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

Xin lỗi vì đã bị hoại tử nhưng tôi thích chức năng của mình;)

PS Tôi chưa bao gồm lớp Core nhưng bạn có thể sử dụng lớp của riêng mình .. DS


Những gì với các tôn sùng trên?
Pacerier 17/2/2015

Không có gì sai khi trả lời một câu hỏi cũ trên Stack Overflow.
bdsl

1
Cảm ơn. Đối với đầu ra, tôi đã sử dụng theo cách này: $ Cột = $ stmt-> fetch ALL (\ PDO :: FETCH_ASSOC); trả về mảng_column (cột $, 'COLUMN_NAME');
Ehsan

6

Giải pháp này là từ dòng lệnh mysql

mysql>USE information_schema;

Trong truy vấn bên dưới, chỉ cần thay đổi <- DATABASE_NAME -> thành cơ sở dữ liệu của bạn và <- TABLENAME -> thành tên bảng của bạn, nơi bạn chỉ muốn các giá trị trường của câu lệnh DESCRIBE

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

4

Ngoài ra còn có điều này nếu bạn thích:

mysql_query('SHOW COLUMNS FROM tableName'); 

4

Còn cái này thì sao:

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

Cũng rất thú vị khi lưu ý rằng bạn có thể sử dụng
EXPLAIN table_nameđồng nghĩa với DESCRIBE table_nameSHOW COLUMNS FROM table_name mặc dù EXPLAIN thường được sử dụng để lấy thông tin về kế hoạch thực hiện truy vấn.



3

Bảng mô tả chức năng MySQL sẽ đưa bạn đến nơi bạn muốn đến (đặt tên bảng của bạn cho "bảng"). Bạn sẽ phải phân tích một số đầu ra, nhưng nó khá dễ. Như tôi nhớ lại, nếu bạn thực hiện truy vấn đó, các hàm truy cập kết quả truy vấn PHP thường cung cấp cho bạn một cặp khóa-giá trị sẽ có tên cột là các khóa. Nhưng đã được một thời gian kể từ khi tôi sử dụng PHP, vì vậy đừng bắt tôi phải làm thế. :)


Có một số tài liệu tốt đẹp tại php.net trong us3.php.net/manual/en/function.mysql-list-fields.php
dannysauer

3

Bạn cũng có thể muốn kiểm tra mysql_fetch_array(), như trong:

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

3

Tôi cần tên cột là một mảng phẳng, trong khi các câu trả lời khác trả về mảng kết hợp, vì vậy tôi đã sử dụng:

$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 hiện bằng:

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

2

Các mysql_list_fieldschức năng có thể bạn quan tâm; nhưng, như hướng dẫn sử dụng:

Chức năng này không được chấp nhận. Thay vào đó, nên sử dụng mysql_query()để phát hành một câu lệnh SQL SHOW COLUMNS FROM table [LIKE 'name'].


Hàm này hoạt động như thế nào nếu nó không đưa ra truy vấn SQL cho máy chủ? Tại sao nó bị phản đối?
Pacerier 17/2/2015

2

bạn có thể lấy toàn bộ cấu trúc bảng bằng cách sử dụng lệnh đơn giản sau.

DESC TableName

hoặc bạn có thể sử dụng truy vấn sau đây.

SHOW COLUMNS FROM TableName

2

trong mysql để lấy chi tiết cột và cấu trúc bảng bằng cách làm theo các từ khóa hoặc truy vấn

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
Để hữu ích hơn cho người dùng trong tương lai, bạn có thể vui lòng cung cấp một số ngữ cảnh cho câu trả lời của bạn, không chỉ là một bãi chứa mã.
Paul Zahra

1

điều này làm việc cho tôi ..

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

1

Tôi đã viết một tập lệnh php đơn giản để tìm nạp các cột trong bảng thông qua 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.";
}
?>

Thưởng thức!


1
Vui lòng gửi câu trả lời thực tế tại đây và chỉ sử dụng ý chính của bạn làm bản sao lưu / tài liệu tham khảo
ChrisF

0

mysqli fetch_field () làm việc cho tôi:

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

Nguồn: https://www.w3schools.com/pHP/func_mysqli_fetch_field.asp

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.