2009-11-27 5 views

Répondre

22

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

Cela devrait également vous aider:

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 

Ou vous pouvez faire:

Show columns from table like 'string'; 

Il y a eu une question similaire posée sur SO here avant.

+0

'SELECT * FROM INFORMATION_SCHEMA.COLUMNS' fonctionne-t-il dans MySQL? – TheVillageIdiot

+0

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

+0

merci mon cher! hurra, a appris une nouvelle chose – TheVillageIdiot

1

Eh bien, d'une façon de faire est:

select price from your_table limit 1 

Si vous obtenez une erreur:

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

alors il n'existe pas.

+0

quel genre d'erreur voulez-vous dire? Comment puis-je vérifier si c'est une erreur? –

+0

Si vous obtenez l'erreur # 1054 –

+0

Oui, mais comment puis-je vérifier cela en PHP?Si (erreur) {etc} ??? –

0

Vous pouvez obtenir une description de toutes les colonnes de votre tableau.

desc your_table;

3

Essayez:

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

Une autre façon de le faire dans 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

Non, les réponses aux questions anciennes aident ceux qui regardent. Continuez à ajouter de meilleures réponses aux vieilles questions que je dis. Si nous ne sommes pas censés «ressusciter» de vieilles questions, alors les mods ne devraient pas fermer les questions répétées. –

+3

Cela ne fonctionne pas pour les tables sans lignes. – jaycode

1

Je trouve cela très utile. Il liste toutes les tables qui ont ce nom de colonne.

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

bien voici une fonction pour vérifier si une colonne particulière existe ou non. Si vous concevez un cadre, cette fonction peut vous venir en aide. Cette fonction vérifie la présence de la colonne quand $ flag est mis à '1' et l'absence de colonne quand $ flag est mis à '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

Je viens de faire quelque chose comme cela en utilisant cette fonction pour Wordpress, ce pour les tables de mise à jour ayant de nouvelles chnages sur elle

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

}

Questions connexes