web-dev-qa-db-fra.com

dbDelta ALTER TABLE syntaxe?

En raison de certaines modifications apportées à la base de données, je dois modifier une table pour y ajouter une colonne. Toutefois, même si la fonction est en cours d'exécution, la table n'est pas modifiée. Voici le code ALTER TABLE que j'ai écrit

$sql = "ALTER TABLE " . $packagetable . " ADD COLUMN price decimal(14,2) NOT NULL AFTER description;";
dbDelta($sql);

La syntaxe pour ALTER TABLE avec dbDelta n’a pas été trouvée en ligne. EDIT: Après avoir examiné l’instruction ALTER TABLE dans le plugin Gravity Form, j’ai mis à jour l’instruction en une seule ligne.

2
mehulved

Vous avez utilisé la fonction dbDelta de manière incorrecte.

L'intérêt de cette fonction est de transmettre une commande SQL de création de table.

Si la table n'existe pas, elle la crée.

Si la table existe mais ne correspond pas , elle est modifiée jusqu'à ce qu'elle corresponde. Cela inclut l'ajout et la mise à jour de colonnes, d'index et d'autres aspects.

Donc, ce que vous voulez faire, c'est lancer dbDelta et lui donner votre table creation sql, pas table alteration sql.

Voir ici la version du Codex sur l'ajout d'une mise à niveau/modification à un tableau utilisant dbDelta

Mais ça va plus loin! dbDelta est une fonction pointilleuse, vous ne pouvez pas y insérer d'instruction SQL, elle doit être formatée correctement

Voici ce que dit le codex sur cette même page:

  1. Vous devez mettre chaque champ sur sa propre ligne dans votre instruction SQL.
  2. Vous devez avoir deux espaces entre les mots PRIMARY KEY et la définition de votre clé primaire.
  3. Vous devez utiliser la clé Word KEY plutôt que son synonyme INDEX et vous devez inclure au moins une clé.
  4. Vous ne devez pas utiliser d'apostrophes ni de backticks autour des noms de champs.

Et d'un autre:

fonction dbDelta

Comme je l’ai déjà mentionné dans un de mes articles, la fonction dbDelta permet d’examiner la structure actuelle de la table, de la comparer à la structure souhaitée et d’ajouter ou de modifier la table selon les besoins, de sorte qu’elle soit très utile pour les mises à jour de nos fichiers. brancher. Cependant, contrairement à de nombreuses fonctions WordPress, la fonction dbDelta est la plus difficile et la plus gênante. Pour que la fonction dbDelta fonctionne, quelques critères devront être remplis.

  1. Vous devez mettre chaque champ sur sa propre ligne dans votre instruction SQL.
  2. Vous devez avoir deux espaces entre les mots PRIMARY KEY et la définition de votre clé primaire.
  3. Vous devez utiliser la clé Word KEY plutôt que son synonyme INDEX et vous devez inclure au moins une clé.

Eh bien, les critères ci-dessus semblent faciles à atteindre. Mais attendez que ça vous frappe.

11
Tom J Nowell