2009-11-27 75 views

Trả lời

22

Trong PHP:

$fields = mysql_list_fields('database_name', 'table_name'); 
$columns = mysql_num_fields($fields); 
for ($i = 0; $i < $columns; $i++) {$field_array[] = mysql_field_name($fields, $i);} 

if (!in_array('price', $field_array)) 
{ 
$result = mysql_query('ALTER TABLE table_name ADD price VARCHAR(10)'); 
} 

này cũng sẽ giúp bạn:

IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = ‘TEST’ AND COLUMN_NAME = ‘TEST_DATE’) 
BEGIN 
    ALTER TABLE TEST ADD TEST_DATE DATETIME 
END 

Hoặc bạn có thể làm:

Show columns from table like 'string'; 

Hiện đã có một câu hỏi tương tự đặt ra trên SO here trước.

+0

hiện 'SELECT * FROM INFORMATION_SCHEMA.COLUMNS' hoạt động trong MySQL? – TheVillageIdiot

+0

@TheVillageIdiot: http://dev.mysql.com/doc/refman/5.0/en/columns-table.html –

+0

cảm ơn bạn thân mến! hurra, đã học được một điều mới – TheVillageIdiot

1

Vâng, một cách là phải làm:

select price from your_table limit 1 

Nếu bạn nhận được một lỗi:

#1054 - Unknown column 'price' in 'field list' 

sau đó nó không tồn tại.

+0

bạn có ý nghĩa gì? Làm thế nào tôi có thể kiểm tra nếu đó là một lỗi sau đó? –

+0

Nếu bạn gặp lỗi # 1054 –

+0

Có, nhưng làm cách nào tôi có thể kiểm tra điều đó trong PHP?Nếu (lỗi) {etc} ??? –

0

Bạn có thể nhận được mô tả về tất cả các cột trong bảng của bạn.

desc your_table;

3

Hãy thử:

IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'TEST' AND COLUMN_NAME = 'Price') 
BEGIN 
    -- do something, e.g. 
    -- ALTER TABLE TEST ADD PRICE DECIMAL 
END 
3

Một cách khác để làm việc đó trong PHP:

$chkcol = mysql_query("SELECT * FROM `table_name` LIMIT 1"); 
$mycol = mysql_fetch_array($chkcol); 
if(isset($mycol['price'])) 
    echo "Column price exists! Do something..."; 
+6

Không, câu trả lời cho các câu hỏi cũ giúp những người tìm kiếm. Tiếp tục thêm câu trả lời tốt hơn cho câu hỏi cũ tôi nói. Nếu chúng ta không được phép "hồi sinh" câu hỏi cũ, thì các mod không nên đóng các câu hỏi lặp đi lặp lại. –

+3

Điều này không hoạt động đối với các bảng không có hàng. – jaycode

1

Tôi thấy điều này rất hữu ích. Nó sẽ liệt kê tất cả các bảng có tên cột đó.

SELECT table_name, 
     column_name 
FROM information_schema.columns 
WHERE column_name LIKE '%the_column_name%' 
1

đây cũng là một chức năng để kiểm tra xem một cột cụ thể có tồn tại hay không.

public function detect_column($my_db, $table, $column) 
{ 
    $db = mysql_select_db($my_db); //select the database 
    $sql = "SHOW COLUMNS FROM $table LIKE '$column'"; //query 
    $result = mysql_query($sql);      //querying 
    if(mysql_num_rows($result) == 0)  //checks the absence of column 
     echo "column $column doesn't exist !"; 
     // write your code here! 
    else 
     echo "column $column exists!"; 
} 

nếu bạn đang thiết kế công việc khung, thì chức năng này có thể trợ giúp bạn. Hàm này kiểm tra sự hiện diện của cột khi cờ $ được đặt thành '1' và không có cột khi cờ $ được đặt thành '0'.

public function detect_column($my_db, $table, $column, $flag) 
{ 
    $this->select_db($my_db); //select the database 
    $sql = "SHOW COLUMNS FROM $table LIKE '$column'"; 
    $result = mysql_query($sql); 
    if(mysql_num_rows($result) == $flag) 
     return true; 
    else 
     return false; 
} 
0

Tôi chỉ làm điều gì đó như thế này sử dụng chức năng này cho Wordpress, điều này cho các bảng cập nhật mà có chnages mới vào nó

public function alterTable() { 

    $table_name = $this->prefix . $this->tables['name']; 

    $select = "select * from `{$table_name}` where 0=0 limit 1;"; 
    $query = $this->db->get_results($select, ARRAY_A); 


    if (isset($query[0]) && !key_exists('adv', $query[0])) { 
     $sql = "ALTER TABLE `{$table_name}` ADD `me` INT NULL DEFAULT NULL ;"; 
     $this->db->query($sql); 
    } 

}

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