Posez votre question Signaler

Les clés étrangères avec MYSQL

Loading 56Messages postés 9 novembre 2007Date d'inscription 24 décembre 2010Dernière intervention - Dernière réponse le 24 nov. 2007 à 05:29
Bonjour,
J'étudie présentement PHP ET MYSQL, et j'ai un soucis avec le remplissage du champ des clés primaires qui migrent vers une autre table. En fait, je sais pas trop comment est ce que ça se passe. Donc j'ai fait un select sur la clé à faire migrer, puis j'ai fait un insert into dans le champ où la clé doit migrer. Mais ça ne marche pas . Après le INSERT INTO le champ en question reçoit pas la valeur qu'il devait recevoir, mais reçoit plutôt "Resource id #4".
Voici un bout de code de ce que j'ai bricolé:
$Req = "SELECT CodeCl FROM classe WHERE Libelle = '"."$ClassEl"."'";//selection du code classe
$Res=mysql_query($Req);
$Requete="INSERT INTO Eleve (MatriculeEl, Nom, Prenom, Email, Login, MDP, CodeCl) VALUES( '$MatEl','$NomEl', '$PrenEl', '$MailEl', '$LoginEl', '$MDPEl1', '$Res');"; //remplissage des champs élèves
mysql_query("$Requete");
J'espère que j'ai été assez claire pour pouvoir bénéficier de votre aide.
Merci
Lire la suite 

Les clés étrangères avec MYSQL »

4 réponses
Réponse
+0
moins plus
Bonjour,

Dans l'exemple cité, il n'y a aucune indication sur la manière dont sont déclarées les clés, donc on ne peut pas répondre.

De mémoire, sur MySql, les clés étrangères ne sont possibles que pour certaines organisations de base de données. Si on n'a pas la bonne organisation, c'est impossible. C'est à déclarer dans le "create table" et avec InnoDB ça marche.

Manu
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour, j'ai le même probléme
Donc voici LE CODE de la table mére PARENT

/** Ajoute un status dans la base de donnée */
public void ajouterStatus(String pStatus){
try{
//POUR AJOUTER UN STATUS
for(int i = 0; i < Integer.parseInt(InterfaceDonnee.status.getText()); i++){
pStatus = tableDonnee.tabStatus[i];
String query = "INSERT INTO STATUS VALUES ('" + pStatus + "')";
System.out.println("(INSERT) NB ligne affectés : "+executerUpdate(query));
}
}
catch(Exception e)
{
e.printStackTrace();
}
}

AFFICHE mes 3 Status ( est une clé primaire dans STATUS)

maintenant j'ai la table fils ou fille UTILISATEUR

/** Ajoute un utilisateur dans la base de donnée */
public void ajouterUtilisateur(String pNom, String pPrenom){
try{
//POUR AJOUTER UN UTILISATEUR

String nom = donnee.genererNom(pNom);
String prenom = donnee.genererPrenom(pPrenom);
String pMotDePasse = tableDonnee.tabPrenom[tableDonnee.nbPrenom];
String resultatStatus = "";

String query = "SELECT * FROM STATUS " ;
ResultSet rss = executerRequete(query);
for( int i=1; i < (int) (Math.random() * 3); i++){
resultatStatus = rss.getString("type_STATUS") ;
rss.next();
}

String queryInsert = "INSERT INTO UTILISATEUR VALUES ( '" + nom + "', '" + prenom + "', '" + pMotDePasse + "', '" + resultatStatus + "')";
System.out.println("(INSERT) NB ligne affectés : "+ executerUpdate(queryInsert));

}
catch(Exception e)
{
e.printStackTrace();
}
}

AFFICHE : Cannot add or update a child row: a foreign key constraint fails (`test`.`utilisateur`, CONSTRAINT `utilisateur_ibfk_1` FOREIGN KEY (`type_STATUS`) REFERENCES `status` (`type_STATUS`))

type_STATUS est une clé étrangére dans UTILISATEUR

est ce que cette syntaxe INSERT INTO UTILISATEUR VALUES est bonne pour inserer une clé etrangére.

je vous remercie de vos réponse. a+
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,

Ben...

Cannot add or update a child row: a foreign key constraint fails


Cela dit clairement que ce n'est pas un problème de syntaxe, mais un problème de clé étrangère : la valeur que vous assignez à type_STATUS n'existe pas dans la table status.

Manu
Ajouter un commentaire
Réponse
+0
moins plus
Salut manu bé siiiiiiiii
Dans ma table STATUS j'ai inseré mes 3 type_status (autres, étudiants, enseignant)
lit bien mon code je lé ait insérer.

ensuite dans la méthose utilisateur

je fais un String query = "SELECT * FROM STATUS " ;
ResultSet rss = executerRequete(query);

mais c vrai que il bugg à cette ligne ResultSet rss = executerRequete(query); donc COMMENT FAIRE !!!!!!!

encore merci à+
Ajouter un commentaire
Ce document intitulé « Les clés étrangères avec MYSQL » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?