Problème requete SQL
                                    
                        Darkstorm88                    
                                    -
                                     
yg_be Messages postés 24281 Statut Contributeur -
        yg_be Messages postés 24281 Statut Contributeur -
        Bonjour à tous et merci à ceux qui répondrons à ce poste
J'ai un problème avec une requête que j'effectue en php.
Quand je l’exécute sans la concaténer avec des variables tout marche et quand je la fais exécuter avec des variables mon site me retourne deux erreurs.
Je fais de la POO.
Voici la requête en question:
$DB->query1('INSERT INTO stock_has_commande (Stock_idStock,Commande_idCommande) VALUES (2,44)'); // ça marche !!!!
$DB->query_command('INSERT INTO stock_has_commande (Stock_idStock,Commande_idCommande) VALUES (:Stock_idStock,:Commande_idCommande)',$idPRODUIT,$idcommande);
// ça renvoie deux erreurs ( "Notice: Array to string conversion in", " Warning: PDOStatement::execute(): SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row")
Voici les définitions des fonctions query1 et query_command:
Voila merci à la personne qui pourra éclairer ma lanterne !!
                
            
                
    
    
    
        J'ai un problème avec une requête que j'effectue en php.
Quand je l’exécute sans la concaténer avec des variables tout marche et quand je la fais exécuter avec des variables mon site me retourne deux erreurs.
Je fais de la POO.
Voici la requête en question:
$DB->query1('INSERT INTO stock_has_commande (Stock_idStock,Commande_idCommande) VALUES (2,44)'); // ça marche !!!!
$DB->query_command('INSERT INTO stock_has_commande (Stock_idStock,Commande_idCommande) VALUES (:Stock_idStock,:Commande_idCommande)',$idPRODUIT,$idcommande);
// ça renvoie deux erreurs ( "Notice: Array to string conversion in", " Warning: PDOStatement::execute(): SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row")
Voici les définitions des fonctions query1 et query_command:
public function query1($sql)
 {
  $req = $this->db->prepare($sql);
  $req->execute();
  return $req;
 }
public function query_command($sql,$idPRODUIT,$idcommande)
 {
  $req = $this->db->prepare($sql);
  $req->execute(array(
   'Stock_idStock'=>$idPRODUIT,
   'Commande_idCommande'=>$idcommande));
 }
Voila merci à la personne qui pourra éclairer ma lanterne !!
        A voir également:         
- Problème requete SQL
- Logiciel sql - Télécharger - Bases de données
- Sql lister les tables ✓ - Forum Programmation
- Sql (+) - Forum Programmation
- Jointure sql ✓ - Forum MySQL
- Erreur lors de l'envoi de la requête facebook - Forum Facebook
2 réponses
                        
                    Bonjour, le message "Warning: PDOStatement::execute(): SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row" ressemble fortement à une erreur de duplication de la clé primaire.  
 
                
                
    
                
                
    Darkstorm88
    Merci de ta réponse, enfaite je récupère une clé primaire pour l'insérer dans une autre table en tant que clé étrangère, seulement ce qui est très étrange c'est quand je met les valeurs sans passer par des variables cela marche alors que l'inverse non..
    
    
                        
                    bonjour, et si tu fais:
    
                $DB->query_command('INSERT INTO stock_has_commande (Stock_idStock,Commande_idCommande) VALUES (:Stock_idStock,:Commande_idCommande)',2,44);
                
                
    Merci de ta réponse,
et bien en faisant ça il me reste l'erreur (" Warning: PDOStatement::execute(): SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails") de toute facon cette méthode ne serait pas adapter car les deux valeurs qui ici sont (2,44) sont amené à tout le temps changer
    et bien en faisant ça il me reste l'erreur (" Warning: PDOStatement::execute(): SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails") de toute facon cette méthode ne serait pas adapter car les deux valeurs qui ici sont (2,44) sont amené à tout le temps changer
    tu peux donc éliminer "quand je l’exécute sans la concaténer avec des variables tout marche et quand je la fais exécuter avec des variables mon site me retourne deux erreurs" et "ce qui est très étrange c'est quand je met les valeurs sans passer par des variables cela marche alors que l'inverse non".
le moment est sans doute venu d'examiner les contraintes que tu déclares dans ta base.
    le moment est sans doute venu d'examiner les contraintes que tu déclares dans ta base.
    Tu entends par les contraintes que je déclare dans la base ?
Sinon après différents test en créant une nouvelle table similaire à l’ancienne sans utiliser de clés,j'ai une erreur étrange:
dans mas fonction "query_command" PHP m'indique que idCommande n'est pas défini ( Notice: Undefined variable: idcommande) alors que juste avant de l'envoyer dans la fonction je vérifie qu'il n'est pas vide.
VOICI LE CODE:
EDIT : Ajout des balises de code
    Sinon après différents test en créant une nouvelle table similaire à l’ancienne sans utiliser de clés,j'ai une erreur étrange:
dans mas fonction "query_command" PHP m'indique que idCommande n'est pas défini ( Notice: Undefined variable: idcommande) alors que juste avant de l'envoyer dans la fonction je vérifie qu'il n'est pas vide.
VOICI LE CODE:
echo " IDCOMMANDE= ";          //vérification via le site je constate que idCommande n'est pas vide
echo $idCommande;
$DB->query_command('INSERT INTO stock_haz_commande (Stock_idStock,Commande_idCommande) VALUES (:Stock_idStock,:Commande_idCommande)',$idPRODUIT,$idCommande);
public function query_command($sql,$idPRODUIT,$idCommande)
 {
  echo" variable idPRODUIT dans la fonction==";
  echo$idPRODUIT;
   echo" variable commande dans la fonction";
   echo$idCommande;
  $req = $this->db->prepare($sql);
  $req->execute(array(
   'Stock_idStock'=>$idPRODUIT,
   'Commande_idCommande'=>$idcommande));
 }
EDIT : Ajout des balises de code
