J'utilise FOREIGN KEY avec dbDelta lors de l'activation du plugin (register_activation_hook ()). Cela fonctionne très bien lors de la création de la table pour la première fois, mais génère une erreur lors de la mise à jour de la table (la table est déjà présente mais une modification doit être effectuée sur la table). Aucune suggestion?
if(GLOBAL_PLUGIN_VERION != get_option("GLOBAL_PLUGIN_VERSION")){
$sql = "CREATE TABLE `".TEST_TABLE."` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT,
`title` VARCHAR( 100 ) NOT NULL,
`description` TEXT DEFAULT NULL,
`location_id` INT( 11 ) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`location_id`) REFERENCES `".TEST2_TABLE."` (`id`)
);";
}
Erreur:
Remarque PHP: décalage indéfini: 1 dans wp-admin/upgrade.php sur la ligne 1568
Erreur de base de données WordPress Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à la version de votre serveur MySQL pour la bonne syntaxe à utiliser près de 'FOREIGN KEY (
location_id
) RÉFÉRENCEStest2
(id
) 'à la ligne 1 pour la requête ALTER TABLE test ADD COLUMN FOREIGN KEY (location_id
) RÉFÉRENCEStest2
(id
) faite par ...Erreur de base de données WordPress Plusieurs clés primaires définies pour la requête ALTER TABLE TEST ADD PRIMARY KEY (
id
) made by ...
Du Codex :
Notez cependant que la fonction dbDelta est plutôt pointilleuse. Par exemple: [...]
- Vous ne devez pas utiliser d'apostrophes ou de retours en arrière autour des noms de champ.
$sql = "CREATE TABLE ".TEST_TABLE." (
id INT( 11 ) NOT NULL AUTO_INCREMENT,
title VARCHAR( 100 ) NOT NULL,
description TEXT DEFAULT NULL,
location_id INT( 11 ) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (location_id) REFERENCES ".TEST2_TABLE." (id)
);";