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

 MySQL Discussion :

requète double en 1 fois


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Par défaut requète double en 1 fois
    Bonjour à tous !!

    J'aimerais savoir si on peux faire des 'requète double' avec 1 seul 'INSERT'.
    C'est à dire plus précisement que j'aimerais placé dans une seule variable les requète sql mais celles ci ajouterons des données à deux tables différentes. Est ce possible a faire ?

    Genre un truc comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql = 'INSERT INTO table1, table2 (row1, row2) (row1, row2) VALUES (value1, value2) (value1, value2)'
    PS : si je vous pose ca c'est que il me faut un truc pour le faire sous une seule variable et pas quelques chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $sql = 'INSERT INTO table1 (row1, row2) VALUES (value1, value2)';
    $sql2 = 'INSERT INTO table2 (row1, row2) VALUES (value1, value2)';
    En espérant que j'ai été assez clair !! Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    Par défaut
    As-tu essayé avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = 'INSERT INTO table1 (row1, row2) VALUES (value1, value2);INSERT INTO table2 (row1, row2) VALUES (value1, value2)';
    un ";" entre les 2 ordres SQL ?

  3. #3
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Par défaut
    Non ca ne marche pas non plus

    A chaque fois c'est la première requète qui s'exécute mais jamais la 2eme.

    NB: j'ai essayé en mettant rien du tout au milieu ou avec une virgule et pareil.

  4. #4
    Membre éprouvé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Par défaut
    Il doit y avoir une erreur dans la 2em. La 2em marche toute seule?

  5. #5
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Par défaut
    ouais la 2eme marche je les ai essayée sur un scrip a aprt séparement mais à mon avis doit y avoir u nautre probleme ...

  6. #6
    Membre chevronné Avatar de Soutou
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 328
    Par défaut
    Le contexte c'est quoi, l'appel dans une procédure cataloguée ou dans un prog. PHP?

    Si tu te sers de prepare puis execute avec l'API mysqli-* une seule instruction est possible. Tu peux aussi écrire une procédure cataloguée qui fait tes 2 insert en passant en paramètre toutes les colonnes à valuer.

  7. #7
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Par défaut
    lol Soutou j'ai rien compris a ce que tu m'a dit ^^

    et c'est dans une classe ...

  8. #8
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Citation Envoyé par omura
    Non ca ne marche pas non plus

    A chaque fois c'est la première requète qui s'exécute mais jamais la 2eme.

    NB: j'ai essayé en mettant rien du tout au milieu ou avec une virgule et pareil.
    C'est normal : pour éviter les problèmes d'injection de code SQL, les API PHP mysql et mysqli interdisent l'exécution de 2 requêtes séparées par un point-virgule.

    Dis-nous en plus sur le contexte : en quoi est-ce important que les deux INSERT se fassent "en même temps" ?

    As-tu pensé aux transactions ?

  9. #9
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Par défaut
    bah en fait j'ai fait une class qui génére automatiquement un formulaire puis qui le traite (vérification des champs + insertion en db des données) mais ils arrivent des fois que une simple requete en db ne suffit pas.

    Alors je voudrait ajouter un variable qu'on pourrait définir hors de la classe qui contiendrais les reqètes sql nécessaire supplementaires. Et ceci dans une seule variable je voit pas trop comment m'arranger pour faire ca autrement (suis assez debutant en la matière)

    tu m'a parlé de transactions ... qu'est ce ?!

  10. #10
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Alors là, à mon tour de ne rien comprendre

    Peut-être devrais-tu tirer parti des mécanismes d'héritage pour avoir des formulaires plus ou moins spécialisés ?

    Sinon les transactions (possibles sous MySQL avec le moteur InnoDB) ont comme caractéristique d'être atomiques, ce qui aurait été utile au cas où tu aurais voulu que les deux requêtes INSERT s'exécutent à la suite en un bloc indivisible. Mais ce n'est apparemment pas ton but.

    cf http://sqlpro.developpez.com/cours/sqlaz/techniques/#L1

  11. #11
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Par défaut
    Peut etre un petit exemple pour y voir plus clair. Voici le code pour le formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $nenkan = array ('adresse' => array('url' => textfield('url',50, 100, 'http://www.')),
    			     'nom' => array('name' => textfield('name', 50, 100)),
    			     'bannière' => array('banner' => textfield('banner', 50, 100)),
    				 'mot-clé' => array('keyword'=> textarea('keyword', 38, 10)),
    );
     
    $f = new Form;
    $f->table = $nenkan;
    $f->table_sql = 'nenkan';
    $f->special = 'INSERT INTO table1 (row1, row2) VALUES (value1, value2);
    $f->check();
    Et rien qu'avec ce code il y a une vérification des données, enregistrement dans la db, envoie d'un mail d'activation si besoin qui sont automatiquement géré par la class.

    Et je demandais comment , s'il existe un moyen, faire exécuter plusieur requète placée dans cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $f->special = 'INSERT INTO table1 (row1, row2) VALUES (value1, value2);
    Ai-je été plus clair ?!

    En tout cas merci d'avoir répondu aussi rapidement !

Discussions similaires

  1. Résultat de requête doublé
    Par ZeDave dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 07/02/2008, 16h08
  2. [Requete] Erreur pour une requête créée en plusieurs fois
    Par soforever dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 09/05/2007, 16h30
  3. Requête qui fonctionne 1 fois sur 100
    Par nicotine002 dans le forum Langage
    Réponses: 1
    Dernier message: 05/08/2006, 11h42
  4. Problème : Requête double les enregistrements !
    Par Aost dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 22/06/2006, 17h44
  5. [Requête] Requête double, "OU" entre requêtes.
    Par muphin dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 21/06/2005, 15h04

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