Problème requete SQL

Fermé
Darkstorm88 - Modifié le 2 juin 2018 à 15:20
yg_be Messages postés 23472 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 février 2025 - 2 juin 2018 à 17:48
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:

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 !!

2 réponses

tyranausor Messages postés 3545 Date d'inscription jeudi 6 août 2009 Statut Membre Dernière intervention 1 avril 2022 2 035
2 juin 2018 à 15:34
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.
0
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..
0
yg_be Messages postés 23472 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 février 2025 Ambassadeur 1 568
2 juin 2018 à 16:32
bonjour, et si tu fais:
$DB->query_command('INSERT INTO stock_has_commande (Stock_idStock,Commande_idCommande) VALUES (:Stock_idStock,:Commande_idCommande)',2,44);
0
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
0
yg_be Messages postés 23472 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 février 2025 1 568 > Darkstorm88
2 juin 2018 à 17:22
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.
0
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:
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
0
yg_be Messages postés 23472 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 février 2025 1 568 > Darkstorm88
2 juin 2018 à 17:48
il faut choisir : idCommande ou idcommande?
0