Les clés étrangères avec MYSQL
Loading
Messages postés
56
Date d'inscription
Statut
Membre
Dernière intervention
-
sultan173 Messages postés 5 Date d'inscription Statut Membre Dernière intervention -
sultan173 Messages postés 5 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- Les clés étrangères avec MYSQL
- Telecharger windows 8.1 avec clé d'activation gratuit - Guide
- Mysql community server - Télécharger - Bases de données
- Clés word - Télécharger - Sécurité
- Trousseau de clés iphone - Guide
- Cles usb non reconnu - Guide
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
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
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+
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+
Bonjour,
Ben...
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
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
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 à+
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 à+