Les clés étrangères avec MYSQL

Fermé
Loading Messages postés 56 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 24 décembre 2010 - 11 nov. 2007 à 15:53
sultan173 Messages postés 5 Date d'inscription dimanche 16 septembre 2007 Statut Membre Dernière intervention 24 novembre 2007 - 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

4 réponses

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
0
sultan173 Messages postés 5 Date d'inscription dimanche 16 septembre 2007 Statut Membre Dernière intervention 24 novembre 2007
23 nov. 2007 à 02:26
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+
0
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
0
sultan173 Messages postés 5 Date d'inscription dimanche 16 septembre 2007 Statut Membre Dernière intervention 24 novembre 2007
24 nov. 2007 à 05:29
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 à+
0