IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

3 INSERT, 2 foreign key [MySQL-5.6]


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 22
    Points : 25
    Points
    25
    Par défaut 3 INSERT, 2 foreign key
    Bonjour,

    J'ai une question qui a sans doute déjà été résolue mais j'ai beau avoir cherché je ne trouve pas..

    Donc voila j'ai une table PERSONNE spécialisée en deux tables SPECIALISTE et UTILISATEUR.
    La table SPECIALISTE se spécialise en deux autres tables ADMINISTRATEUR et SUPER_ADMINISTRATEUR.

    Mon but est d'insérer un nouvel Administrateur.

    Donc voilà mon code:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    try{
    	$this->bdd->beginTransaction();
    	$requete = $this->bdd->prepare("INSERT INTO PERSONNE(typePersonne, clePersonne, nom, prenom, login, password, adrE, tel) VALUES(:typePersonne, :clePersonne, :nom, :prenom, :login, :password, :adrE, :tel);");
    	$requete->execute(array(
    		'typePersonne'=> $this->type,
    		'clePersonne' => $this->cle,
    		'nom'=> $this->nom,
    		'prenom'=> $this->prenom,
    		'login'=> $this->login,
    		'password'=> $this->pass1,
    		'adrE'=> $this->adrE,
    		'tel'=> $this->tel
    	));
    	$PDOid = $this->bdd->prepare("SELECT idPersonne FROM PERSONNE WHERE clePersonne = :cle");
    	$PDOid->execute(array(
    		'cle' => $this->cle
    	));
    	$id = $PDOid->fetch();
    	$requete2 = $this->bdd->prepare("INSERT INTO SPECIALISTE(idSpecialiste) VALUES (:id);");
    	$requete2->execute(array(
    		'id' => $id
    	));
    	$requete3 = $this->bdd->prepare("INSERT INTO ADMINISTRATEUR(idAdministrateur) VALUES (:id);");
    	$requete3->execute(array(
    		'id' => $id
    	));
    	$this->bdd->commit();
    	$erreur = "OK";;
    }catch(Exception $e){
    	$this->bdd->ROLLBACK();
    	$erreur = $id." ".$e;
    }
    Il est donc censé insérer les valeurs dans les tables PERSONNE puis SPECIALISTE puis ADMINISTRATEUR.
    Cependant les foreign keys des tables SPECIALISTE et ADMINISTRATEUR bloquent:
    Quand j'insère dans SPECIALISTE, une erreur me dit qu'il n'existe pas dans PERSONNE....

    Je ne vois pas comment procéder. Ne me dites pas qu'il faut faire les requêtes une par une ? Je veux dire dans des fonctions différentes ?

    Merci d'avance de vos réponses !

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 019
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 019
    Points : 23 713
    Points
    23 713
    Par défaut
    Bonjour,

    Quelles sont les clés étrangères de ces différentes tables ?
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 22
    Points : 25
    Points
    25
    Par défaut
    Bonjour et merci d'avoir répondu.

    Citation Envoyé par ced Voir le message
    Quelles sont les clés étrangères de ces différentes tables ?
    Sur SPECIALISTE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CONSTRAINT `fk_SPECIALISTE_PERSONNE1`    FOREIGN KEY (`idSpecialiste`) REFERENCES `delingBase`.`PERSONNE` (`idPersonne`) ON DELETE NO ACTION ON UPDATE NO ACTION
    Et sur ADMINISTRATEUR:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CONSTRAINT `fk_SUPER_ADMINISTRATEUR_SPECIALISTE1`FOREIGN KEY (`idSuperAdministrateur`) REFERENCES `delingBase`.`SPECIALISTE` (`idSpecialiste`) ON DELETE NO ACTION ON UPDATE NO ACTION
    Par avance:
    Je sais très bien qu'il faut d'abord entrer dans PERSONNE la personne que l'on veut rentrer dans SPECIALISTE et pareil pour SPECIALISTE/ADMINISTRATEUR, cepandant avec le script plus haut, ils me donnent cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`delingbase`.`specialiste`, CONSTRAINT `fk_SPECIALISTE_PERSONNE1` FOREIGN KEY (`idSpecialiste`) REFERENCES `personne` (`idPersonne`) ON DELETE NO ACTION ON UPDATE NO ACTION)' in [...] Blablabla [...]
    Comme si la première requête ne s'était pas exécutée...

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 22
    Points : 25
    Points
    25
    Par défaut
    Ce qui coince, je crois que c'est que j'essaye de faire un SELECT sur un élément que je viens tout juste d'insérer dans la même transaction.

    Pourtant même sans transaction, j'arrive à la même erreur..

    Help :/

  5. #5
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 019
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 019
    Points : 23 713
    Points
    23 713
    Par défaut
    Le problème doit se situer côté PHP, parce que pour les requêtes SQL, comme ça, ça a l'air OK...
    Que donne un echo($id) ?
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,


    Êtes-vous sûr de bien récupérer l'id ?

    Lorsque vous faites $id = $PDOid->fetch(); il me semble que vous ne récupérez pas l'id, mais un tableau contenant le résultat de la requête.

    Affichez la valeur de votre variable $id avant de lancer l'insertion dans la table SPECIALISTE.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 22
    Points : 25
    Points
    25
    Par défaut
    Ah mais oui suis-je bête !

    Je n'ai plus de quoi tester là où je me trouve mais c'est vrai que le fetch sur un PDO nous ressort un tableau !

    Je pense donc que cela devrait marcher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $PDOid = $this->bdd->prepare("SELECT idPersonne FROM PERSONNE WHERE clePersonne = :cle");
    	$PDOid->execute(array(
    		'cle' => $this->cle
    	));
    	$id = $PDOid->fetch();
    	$requete2 = $this->bdd->prepare("INSERT INTO SPECIALISTE(idSpecialiste) VALUES (:id);");
    	$requete2->execute(array(
    		'id' => $id['idPersonne']
    	));
    	$requete3 = $this->bdd->prepare("INSERT INTO ADMINISTRATEUR(idAdministrateur) VALUES (:id);");
    	$requete3->execute(array(
    		'id' => $id['idPersonne']
    	));
    Je place ce sujet en résolu si cela fonctionne demain matin.

    Merci beaucoup à vous deux, ce sont parfois des petites erreurs qui vous font tourner la tête pendant des heures :/

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 22
    Points : 25
    Points
    25
    Par défaut
    Ça marche! Merci encore

    Sujet résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de Foreign Key pour insertion dans ma table de faits
    Par arno974 dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 10/05/2010, 13h54
  2. [SQL-Server] insert into d'une table reliant deux tables(foreign key)
    Par evra76 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/07/2009, 10h38
  3. insertion invonlontaire de Foreign Keys
    Par karim_sousse dans le forum Hibernate
    Réponses: 1
    Dernier message: 29/06/2009, 17h18
  4. The INSERT statement conflicted with the FOREIGN KEY
    Par hajarussa dans le forum ASP.NET
    Réponses: 3
    Dernier message: 04/06/2009, 16h17
  5. Réponses: 6
    Dernier message: 14/05/2009, 11h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo