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 :

PDO prepare avec plusieurs requêtes


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 126
    Par défaut PDO prepare avec plusieurs requêtes
    Bonjour!

    Je dois [TRES] mal faire car je suis obligé d'user d'imagination pour faire plusieurs requetes à la suite.
    Actuellement, et cela fonctionne, je fais comme cela pour successivement réaliser :
    1. Un query pour CREATE
    2. Un query pour SELECT
    3. Un prepare pour INSERT / UPDATE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    <?php  
    $date = date("Ymd");
    $heure = date("His");
     
    $pdo = new PDO('mysql:host=localhost;dbname=MABASE', 'MONUSER', 'MONPASSWORD');
    $pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
    $pdo->setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_OBJ);
    $pdo->setAttribute(\PDO::ATTR_EMULATE_PREPARES, false);
    $pdo->setAttribute(\PDO::ATTR_CASE, \PDO::CASE_LOWER);
     
            $pdo->query("CREATE TABLE IF NOT EXISTS `$resultat2->subid` (date DATE, heure TIME, prod INT, PRIMARY KEY(date, heure));");
     
              $prodmax=$pdo->query('SELECT prod FROM `'.$resultat2->subid.'` ORDER BY prod DESC LIMIT 1');
              $prodmax->setFetchMode(PDO::FETCH_OBJ);
              $valeurprodmax = $prodmax->fetch();
     
                if ($texte[1] >= $valeurprodmax->prod)
                  {
                    $stmt = $pdo->prepare('INSERT INTO `' . $resultat2->subid . '` (date, heure, prod) VALUES (str_to_date('.$date.',\'%Y%m%d\'), '.$heure.', '.$texte[1].') ON DUPLICATE KEY UPDATE date = VALUES(date), heure = VALUES(heure), prod = VALUES(prod)');    
                    $stmt->execute();
                  }            
    ?>
    Je souhaite rajouter un DELETE dans le prepare (ou ailleurs du moment que ce soit faire avant le INSERT/UPDATE), j'ai lu quelque part qu'on pouvait mettre plusieurs requetes du moment qu'on les sépare avec ; ou \ ce qui doit être finalement faux car cela ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $stmt = $pdo->prepare('DELETE FROM '.$resultat2->subid.' WHERE date = str_to_date('.$date.',\'%Y%m%d\'); INSERT INTO `' . $resultat2->subid . '` (date, heure, prod) VALUES (str_to_date('.$date.',\'%Y%m%d\'), '.$heure.', '.$texte[1].') ON DUPLICATE KEY UPDATE date = VALUES(date), heure = VALUES(heure), prod = VALUES(prod)');    
    $stmt->execute();
    Tout comme rajouter dans le prepare ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $stmt = $pdo->prepare('DELETE FROM '.$resultat2->subid.' WHERE date = str_to_date('.$date.',\'%Y%m%d\')'); 
    $stmt = $pdo->prepare('INSERT INTO `' . $resultat2->subid . '` (date, heure, prod) VALUES (str_to_date('.$date.',\'%Y%m%d\'), '.$heure.', '.$texte[1].') ON DUPLICATE KEY UPDATE date = VALUES(date), heure = VALUES(heure), prod = VALUES(prod)');    
    $stmt->execute();
    PS : Il est normal que je fasse un DELETE avec INSERT/UPDATE car ayant des clés composées, je peux avoir plusieurs enregistrement au même jour mais pas à la même heure. Je veux supprimer tout enregistrement du jour précis avant d’insérer par cette méthode.

    Je ne peux déclarer plusieurs query, exec ou prepare dans mySQL, comment faire au mieux?

    Merci!!!!!

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 126
    Par défaut
    Aie aie aie, la solution doit être toute simple mais je m'y casse les dents depuis quelques heures...!!!!!!!!
    Soulagez moi!!!!!!!!!!!!!

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 126
    Par défaut
    Bonjour!
    Bon je donne ici la soluce :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $pdo->beginTransaction();
                    $stmt1 = $pdo->prepare('DELETE FROM `' . $resultat2->subid . '` WHERE date=str_to_date('.$date.',\'%Y%m%d\')');
                    $stmt1->execute();                
                    $stmt = $pdo->prepare('INSERT INTO `' . $resultat2->subid . '` (date, heure, prod) VALUES (str_to_date('.$date.',\'%Y%m%d\'), '.$heure.', '.$texte[1].')');            //ON DUPLICATE KEY UPDATE date = VALUES(date), heure = VALUES(heure), prod = VALUES(prod)
                    $stmt->execute();
                    $pdo->commit();
    Bye

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    bonjour,

    faites deux requetes ?

    Sinon orientez vous vers un forum PHP, ici c'est plus dédiez au SGBD uniquement.

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

Discussions similaires

  1. [MySQL] Génération CSV UNIQUE avec plusieurs requêtes
    Par Willisindaplace dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 15/05/2014, 15h31
  2. Réponses: 3
    Dernier message: 14/05/2012, 12h55
  3. Bouton avec plusieurs requètes
    Par redoran dans le forum Composants VCL
    Réponses: 2
    Dernier message: 06/12/2010, 14h41
  4. une conditionnel IF avec plusieur requête
    Par vaness303 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/05/2009, 16h54
  5. Problème avec plusieurs requêtes sql
    Par Raul10 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 06/08/2007, 19h21

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