2009-11-27 16 views
11

mysqlテーブルフィールドが存在するかどうかを確認する方法はありますか?mysqlテーブルの列が存在するかどうかを確認する方法はありますか?

カラム名は「価格」で、それが存在するかどうかを確認する必要があります。

は... 'EXISTSの作品は本当にどのように

任意の例やアイデアを理解されていないことがありますか?

おかげ

+0

は、あなたが「価格」という名前の列を意味ですか? – CBFraser

+0

あなたは正しいです... –

答えて

22

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

また、これはあなたを助ける必要があります。

あなたが行うことができます
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 

または:

Show columns from table like 'string'; 

同様の質問が前SO hereにあり提起されてきました。

+0

の私の答えを参照してください 'SELECT * FROM INFORMATION_SCHEMA.COLUMNS'はMySQLで動作しますか? – TheVillageIdiot

+0

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

+0

おかげです!ハラー、新しいことを学んだ – TheVillageIdiot

1

まあ、一つの方法は、実行することです。

select price from your_table limit 1 

あなたがエラーを取得する場合:

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

、それが存在しません。 PHPで

+0

どのようなエラーがありますか?それがエラーであればどうすれば確認できますか? –

+0

エラー#1054 –

+0

はい、それがPHPで確認できますか?(エラー){etc}なら??? –

0

テーブルのすべての列の説明が表示されます。

desc your_table;

3

試してみてください。

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

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

いいえ、古い質問への回答は探している人に役立ちます。私が言う古い質問に、より良い答えを加え続けてください。古い質問を「復活」させることを想定していない場合、改造者は繰り返し質問を終わらせるべきではありません。 –

+3

これは、行のない表に対しては機能しません。 – jaycode

1

私は、これは非常に有用であることが判明。その列名を持つすべてのテーブルが一覧表示されます。

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

また、特定の列が存在するかどうかをチェックする機能もあります。

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!"; 
} 

フレームワークを設計している場合は、この機能が役立ちます。この関数は、$ flagが '1'に設定されているときの列の有無と、$ flagが '0'に設定されているときに列がないことをチェックします。

私はWordpressのために、この機能を使用してこのような何かをやっ
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

、その上に新しいchnagesを持っている更新テーブルのため、この

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

}

関連する問題