web-dev-qa-db-fra.com

Erreur SQL lors de la mise à jour du composant personnalisé dans Joomla 3.9

J'ai un composant personnalisé et je veux ajouter un filtre de langue à mon extension. Donc, dans mon fichier de mise à jour SQL, j'ai ajouté les deux lignes suivantes pour modifier mes tables.

ALTER TABLE `#__contract_contracts` ADD `language` CHAR(7) NOT NULL DEFAULT '*' AFTER `alias`;
ALTER TABLE `#__contract_templates` ADD `language` CHAR(7) NOT NULL DEFAULT '*' AFTER `alias`;

Mais j'obtiens l'erreur suivante et je ne peux pas mettre à jour.

Avertissement JInstaller:: Installation: Erreur SQL Nom de table incorrect 'ALTER TABLE' Mise à jour de l'extension: Requête de traitement des erreurs SQL: échec de la fonction de base de données avec le numéro d'erreur 1103 Nom de table incorrect 'ALTER TABLE' SQL = ALTER TABLE `ALTER TABLE`

Erreur
Erreur lors de l'installation du composant

J'ai vérifié les noms de table et de champ plusieurs fois et quand je lance les requêtes suivantes dans phpMyAdmin, ça marche.

ALTER TABLE `jdev_contract_contracts` ADD `language` CHAR(7) NOT NULL DEFAULT '*' AFTER `alias`;
ALTER TABLE `jdev_contract_templates` ADD `language` CHAR(7) NOT NULL DEFAULT '*' AFTER `alias`;
1
mixahlos

Voici le problème tel que je le comprends - je caresse simultanément une boule de cristal au moment de la décomposer.

  1. Tu as un install.mysql.utf8.sql fichier contenant (au moins) une requête CREATE suivie de (au moins) un ALTER TABLE. Cela pourrait ressembler à ceci (les créations de tableaux supplémentaires ne sont pas pertinentes pour mon explication) ...
CREATE TABLE IF NOT EXISTS #__contract_contracts (...
...
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci;
ALTER TABLE #_contract_contracts ADD id INT PRIMARY KEY AUTO_INCREMENT;
             ^^---whoops, typo @ prefix

Donc, vous vous rendez compte qu’il ya une faute de frappe, vous corrigez la syntaxe, vous effacez les dossiers cache et tmp, mais l’installation défectueuse en fait est terminée avec la faute de frappe dans le fichier d’installation, elle doit donc être désinstallée. Hélas, même après toutes ces tactiques combinées à tout autre processus non mentionné que vous avez effectué lors de la désinstallation puis de la réinstallation du composant, la version défectueuse de votre fichier d'installation n'a pas été effacée.

Pourquoi un seul soulignement manquant pose-t-il tant de problèmes? Joomla est à la recherche du préfixe réservé #__ - tout écart par rapport à cette séquence de 3 caractères sera ignoré en tant que sous-chaîne de remplacement de préfixe. Je vais aussi supposer qu'il n'y a pas de backtick autour du nom de la table après ALTER TABLE.

Comme Joomla n’a pas remplacé l’espace réservé au préfixe, MySQL traitera le # comme d'habitude - comme le début d'un commentaire! Cela rend tous les caractères après le # comme "non passible de poursuites". Maintenant, votre requête se lit comme ceci: (Je remplacerai le commentaire MySQL par PHP))

   ALTER TABLE //_contract_contracts` ADD id INT PRIMARY KEY AUTO_INCREMENT;
   ^^^^^^^^^^^^-- only this part is read by MySQL

Ensuite, votre seul fichier de mise à jour sera ajouté à la fin de celui-ci ...

ALTER TABLE ALTER TABLE `#__contract_contracts` ADD `language` CHAR(7) NOT NULL DEFAULT '*' AFTER `alias`;
ALTER TABLE `#__contract_templates` ADD `language` CHAR(7) NOT NULL DEFAULT '*' AFTER `alias`;

Enfin, mon conseil est de désinstaller votre composant (à nouveau). Vérifiez que vous avez bien enregistré votre correction typo dans le fichier utilisé. Réinitialisez le contrôle de version pour que Joomla sache lire le fichier d'installation corrigé. N'hésitez pas à effacer toute mise en cache qui vous préoccupe. Ensuite, installez le composant comme si c'était la première fois.

1
mickmackusa