web-dev-qa-db-fra.com

dbDelta utilisant la clé étrangère ne fonctionne pas sur la mise à jour

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ÉRENCES test2 (id) 'à la ligne 1 pour la requête ALTER TABLE test ADD COLUMN FOREIGN KEY (location_id) RÉFÉRENCES test2 (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 ...

1
CodePorter

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)
);";
1
Pat J