IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

une requête préparée pour un insert avec jointure? [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Par défaut une requête préparée pour un insert avec jointure?
    Bonjour,
    J'utilise PDO et je suis en train de faire une requête préparée pour un insert avec des jointures. D'habitude j'utilise les marqueurs ? pour des requêtes simples comme on trouve dans la doc php :
    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $sql='INSERT INTO table1 (champ1) VALUES (?)';
    		$stmt=$connexion->prepare($sql);
    		$stmt->bindParam(1,ma variable);
    		$stmt->execute();
    Mais là comme il y a le select après je ne sais pas du tout comment faire avec les marqueurs et comment écrire ma requête ci dessous qui est non préparée en requête préparée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    'INSERT INTO TABLE1 (idContact,idType,titre,description)
    SELECT idContact, idType,'$titre','$description'
    FROM TABLE2, TABLE3
    WHERE table2.type='$typeProg'
    AND table3.nom='$nom'; '
    Je les mets où les marqueurs et après dans le select comment je fais, je bloque sur la syntaxe.
    Merci de voter aide

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    ba tu remplaces toutes tes variables par des marqueurs.
    c'est pas plus compliqué.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Par défaut
    Ah bon? J'ai l'air un peu bête.
    Ca ferait donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $sql='INSERT INTO programmation(idContact,idtypeProg,titreProg,descriptionProg)
    SELECT idContact,idtypeProg,?,?
    FROM contact,typeProg
    WHERE typeProg.libelTypeProg=?
    AND contact.nomContact=?';
     
    $stmt=$connexion->prepare($sql);
    $stmt->bindParam(1,$titreProg);
    $stmt->bindParam(2,$descriptionProg);
    $stmt->bindParam(2,$typeProg);
    $stmt->bindParam(4,$nomContact);
    $stmt->execute();
    C'est ça à priori?
    Ca fait un peu bizarre mais peut-être que je cherchais midi à 14h.
    Et question bonus ; si je veux faire une nouvelle insertion avec d'autres variables juste après, est ce que je peux recommencer seulement après le prepare? Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $stmt->bindParam(1,$autreVariable);
    etc pour les 3 autres.
    Parce que j'ai lu un truc sur la différence entre bindParam et bindValue et je n'ai rien compris. Je me suis quand même demandée si ça n'avait pas un lien avec cette situation là : attribuer les ? à d'autres variables juste après et faire un autre stmt->execute() dans la foulée.
    Donc est-ce possible et si oui avec bindParam ou bindValue?

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    bindparam : tu associes un marqueur et une variable
    bindvalue : tu associes un marqueur et une valeur

    si tu fais
    $stmt->bindParam(1,$autreVariable);
    dans ta requete, le marqueur 1 aura la valeur qu'a $autreVariable au moment de l'execution

    si tu fais
    $stmt->bindValue(1,$autreVariable);
    dans ta requete, le marqueur 1 aura la valeur qu'a $autreVariable au moment du bindvalue
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Par défaut
    si tu fais $stmt->bindParam(1,$autreVariable);
    dans ta requete, le marqueur 1 aura la valeur qu'a $autreVariable au moment de l'execution

    si tu fais $stmt->bindValue(1,$autreVariable);
    dans ta requete, le marqueur 1 aura la valeur qu'a $autreVariable au moment du bindvalue
    Euh peut-être qu'il y a un truc qui m'échappe mais comme j'exécute juste après avoir utilisé le bindParam ou le bindValue, qu'est ce que ça peut changer?

    Et sinon je peux alors réattribuer de nouvelles variables au marqueur et réexécuter la requête dans la foulée?

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    comme j'exécute juste après avoir utilisé le bindParam ou le bindValue, qu'est ce que ça peut changer?
    Tu n'es pas obligé d'executer ta requete juste apres et tu peux re-executer la requete avec des valeurs differentes.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre averti
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Par défaut
    D'accord, ça y est!! Ca commence à s'éclaircir!!
    En fait dans mon cas présent il n'y pas de différence.
    Excuse moi d'insister quant à ma question précédente mais si après la 1ère insertion des 4 éléments je veux enchaîner et insérer 4 autres avec d'autres variables je reécris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $stmt->bindParam(1,$autreVariable1);
    $stmt->bindParam(2,$autreVariable2);
    $stmt->bindParam(2,$autreVariable3);
    $stmt->bindParam(4,$autreVariable4);
    $stmt->execute();
    ou je fais juste une autre affectation genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $titreProg=$autreVariable1;
    $descriptionProg=$autreVariable2;
    $typeProg=$autreVariable3;
    $nomContact=$autreVariable4;
    $stmt->execute();

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu sais tu peux faire le test pour le savoir

    Mais sinon oui, tu as juste besoin d'executer la requete ; elle prendra la nouvelle valeur des parametres qui ont été lié precedemment.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre averti
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Par défaut
    Oui tu as raison je vais tester tout ça, mais demain je crois.
    En tout cas vraiment merci beaucoup pour ta patience et tes réponses claires et précises.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Insertion données avec une requête préparée
    Par Mikma dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 23/05/2013, 21h59
  2. [MySQL] Probleme avec une requête préparée
    Par lucduke dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 14/12/2012, 06h59
  3. probleme avec une requête préparée
    Par stc074 dans le forum JDBC
    Réponses: 5
    Dernier message: 19/08/2010, 22h04
  4. Réponses: 2
    Dernier message: 27/05/2010, 09h37
  5. Problème avec une requête SQL, pour access
    Par a.bott dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 23/09/2008, 17h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo