Bonjour à tous,

je me tourne vers vous car j'ai épluché Google dans toutes les langues et je perd un peu espoir, surtout que cette notion m'échappe encore.

Voilà, j'ai suivi à la lettre la formation PHP jussq'au TP2, seulement, quand vient le moment de la création de la base de données, rien ne va ! Alors que j'ai tout reproduit à la lettre...

CREATE TABLE post_category (
    post_id INT UNSIGNED NOT NULL,
    category_id INT UNSIGNED NOT NULL,
    PRIMARY KEY (post_id, category_id),
    CONSTRAINT fk_post
        FOREIGN KEY (post_id)
        REFERENCES post (id)
        ON DELETE CASCADE
        ON UPDATE RESTRICT,
    CONSTRAINT fk_category
        FOREIGN KEY (category_id)
        REFERENCES category (id)
        ON DELETE CASCADE
        ON UPDATE RESTRICT
) ENGINE = InnoDB /* j'ai fait avec et sans le innoDB

Voici l'erreur que me retourne Adminer : Ne peut créer la table tutoblog2.post_category (Errcode: 150 "Foreign key constraint is incorrectly formed")

Pourtant la créations des deux tables précédentes c'est passé sans soucis
Et alors.... j'ai tout tenté, reformulé, desinstallé réinstallé.... mais rien n'y fait !

Est-ce un problème de version ? Les formulations ont-elle changée depuis la formations ?
Un coup de main serait le top ! je suis bloqué au beau millieu de la formation et j'ai pas encore le bagage pour improviser ^^

Merci par avance

ps : j'ai testé avec adminer, warm et mysql de la meme version que le tuto, PUIS en dernière version. Aucun changement

5 réponses


psyfou
Réponse acceptée

Hello ! Si tu ne veux pas te casser la tête à créer ta BDD tu peux aussi utiliser un logiciel de modélisation de BDD (comme JMerise mais celui-ci est devenue payant... Ou tout simplement créer ta BDD a la main dans PHPMyadmin).
Après dans le "code" SQL que tu as mis tu ne créer qu'une seule table "post_category". L'erreur qui t'es indiqué te dit que tu as un soucis lorsque tu veux créer tes clefs étrangères. Si tu peux donner ton code en entier avec la création des deux tables ça serait plus simple ^^ !

Guirlande
Auteur
Réponse acceptée

Salut ! Merci pour ta réponse, mais je viens à l'instant de trouver d'où venais le soucis...

En fait, lors de la création des deux premières tables, adminer me change le moteur et l'encodage par defaut (va comprendre pourquoi). Du coup lorsque je créé la troisième table, ca match pas...

L'embêtant c'est que je suis obligé de remettre les paramètres comme il faut à chaque requête OMG (phpmyadmin idem)

M'enfin au moins ça fonctione, si ça peut aider

Merci en tout ca

Ré-édit, désolé pour la mise en page :)

Et au fait, si je lance la commande sans préciser l'engine, la table va être créée mais elle ne prends pas en compte les CONSTRAINT

Pas de soucis mais je n'ai rien fait au final ^^ !
OMG ! Horrible !! Et tu peux pas le changer par défault ou créer un encodage par défault ? :o Bizarre tout de même... Bon courage pour la suite :)

Quand je fais mes requetes depuis php tout va bien, mais en direct ca casse tous les réglages... Ya quand même des mystères !