Mes recherches et mes expériences n'ont pas encore apporté de réponse, j'espère donc avoir de l'aide.
Je modifie le fichier d'installation d'une application qui dans les versions précédentes n'avait pas de colonne que je souhaite ajouter maintenant. Je ne veux pas ajouter la colonne manuellement, mais dans le fichier d'installation et uniquement si la nouvelle colonne n'existe pas déjà dans le tableau.
La table est créée comme suit:
CREATE TABLE IF NOT EXISTS `#__comm_subscribers` (
`subscriber_id` int(11) NOT NULL auto_increment,
`user_id` int(11) NOT NULL default '0',
`subscriber_name` varchar(64) NOT NULL default '',
`subscriber_surname` varchar(64) NOT NULL default '',
`subscriber_email` varchar(64) NOT NULL default '',
`confirmed` tinyint(1) NOT NULL default '0',
`subscribe_date` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`subscriber_id`),
UNIQUE KEY `subscriber_email` (`subscriber_email`)
) ENGINE=MyISAM CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' COMMENT='Subscribers for Comm are stored here.';
Si j'ajoute ce qui suit, sous l'instruction create table, je ne suis pas sûr de ce qui se passe si la colonne existe déjà (et est peut-être remplie):
ALTER TABLE `#__comm_subscribers` ADD `subscriber_surname`;
ALTER TABLE `#__comm_subscribers` MODIFY `subscriber_surname` varchar(64) NOT NULL default '';
Alors, j'ai essayé ce qui suit que j'ai trouvé quelque part. Cela ne semble pas fonctionner mais je ne suis pas tout à fait sûr de l'avoir utilisé correctement.
/*delimiter '//'
CREATE PROCEDURE addcol() BEGIN
IF NOT EXISTS(
SELECT * FROM information_schema.COLUMNS
WHERE COLUMN_NAME='subscriber_surname' AND TABLE_NAME='#__comm_subscribers'
)
THEN
ALTER TABLE `#__comm_subscribers`
ADD COLUMN `subscriber_surname` varchar(64) NOT NULL default '';
END IF;
END;
//
delimiter ';'
CALL addcol();
DROP PROCEDURE addcol;*/
Quelqu'un a-t-il un bon moyen de le faire?