2009-10-06 45 views

Trả lời

387

Bạn có thể sử dụng DESCRIBE:

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; 
+9

DESCRIBE thực sự là một phím tắt cho SHOW COLUMNS (http: //dev.mysql.com/doc/refman/5.0/vi/describe.html) – svens

+0

@svens yeah, MÔ TẢ đơn giản hơn, SHOW COLUMNS cung cấp cho bạn nhiều tùy chọn hơn – Greg

+8

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 là chỉ học 1 cách nếu bạn phải làm vậy. – Kibbee

3

Nhìn vào:

mysql_query('DESCRIBE '.$table); 
3

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

+0

Có một số tài liệu khá hay tại php.net trong http://us3.php.net/manual/en/function.mysql-list-fields.php – dannysauer

32

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

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: INFORMATION_SCHEMA COLUMNS

+1

Tại sao bạn nói "gần"? – Pacerier

+1

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

+0

@ WAF, tôi nghĩ anh ấy có ý nghĩa gì đó khác, không phải vậy. – Pacerier

3

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

mysql_query('SHOW COLUMNS FROM tableName'); 
2

Chức năng mysql_list_fields thể bạn quan tâm; nhưng, theo cách thủ công nêu rõ:

Chức năng này không còn được dùng nữa. Thay vào đó, bạn có thể sử dụng số để sử dụng số mysql_query() đến phát hành câu lệnh SQL SHOW COLUMNS FROM table [LIKE 'name'].

+0

Chức năng hoạt động như thế nào nếu nó không phát ra truy vấn SQL đến máy chủ? Tại sao nó không được chấp nhận? – Pacerier

3

Bạn cũng có thể w ant để 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'; 
} 
18

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ì sự hoại nhưng tôi thích chức năng của tôi;)

T.B. 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 bạn .. D.S.

+0

Điều gì xảy ra với trường hợp giả mạo trên? – Pacerier

+0

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: $ columns = $ stmt-> fetchAll (\ PDO :: FETCH_ASSOC); trả về mảng_column ($ cột, 'COLUMN_NAME'); – Ehsan

5

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

mysql>USE information_schema; 

Trong truy vấn dưới đây chỉ cần thay đổi < --DATABASE_NAME -> để cơ sở dữ liệu của bạn và < --TABLENAME -> để tên bảng của bạn, nơi bạn chỉ muốn Dòng giá trị của MÔ TẢ tuyên bố

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

Các câu trả lời khác đã đề cập đến điều này .......... – Pacerier

3

Nó cũng thú vị để lưu ý rằng bạn có thể sử dụng
EXPLAIN table_name đó đồng nghĩa với DESCRIBE table_name và 012. mặc dù EXPLAIN thường được sử dụng để lấy thông tin về gói thực thi truy vấn.

5

Làm thế nào về điều này:

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; 
1

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

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

DESC TableName 

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

SHOW COLUMNS FROM TableName 
1

trong mysql để có được cột chi tiết và cấu trúc bảng theo từ khóa sau 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

1
$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ố bối cảnh cho câu trả lời của bạn, không chỉ là một kết xuất mã. –

1

tôi cần tên cột như một mảng phẳng, trong khi câu trả lời khác trở 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 nay tương đương với:

(
    [0] => name 
    [1] => parent 
    [2] => number 
    [3] => chart_id 
    [4] => type 
    [5] => id 
) 
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

Tận hưởng!

+0

Vui lòng đăng câu trả lời thực tế tại đây và chỉ sử dụng gist của bạn làm bản sao lưu/tham chiếu – ChrisF

Các vấn đề liên quan