Partage
  • Partager sur Facebook
  • Partager sur Twitter

UPDATE/CREATE

    20 janvier 2017 à 11:03:04

    Bonjour,

    Dans l'optique de créer et modifier plusieurs tables dans ma BDD, est-il possible d'utiliser la requête UPDATE lorsque la table n'est pas créé? Car j'aimerais pouvoir avoir le choix de modifier la table si elle existe et de la créer si elle n'existe pas.

    Merci

    -
    Edité par DimitriNeker1 20 janvier 2017 à 11:04:36

    • Partager sur Facebook
    • Partager sur Twitter
      20 janvier 2017 à 11:19:04

      Salut,

      les SELECT / UPDATE / DELETE se font sur des tables donc la réponse à ta première question est faite ;)

      Tu peux "tester" l'existence d'une table en vérifiant le retour de la requête SQL, ce que ne font pas 95% des dév ici ;)

      Pour créer une table => Create table...

      Pour modifier une table ALTER table ...

      Pour plus d'information:

      1) lire la doc,

      2) venir ici poser des questions en relation avec les docs ;)

      ++

      -
      Edité par christouphe 20 janvier 2017 à 11:20:01

      • Partager sur Facebook
      • Partager sur Twitter
        20 janvier 2017 à 11:30:19

        Oups, il semblerait que j'ai confondu entrée et table,  je ne souhaite pas modifier une table. Je voulais donc savoir si je pouvais utiliser la requête INSERT INTO  à la place de UPDATE afin de pourvoir insérer une nouvelle ligne ou la modifier si elle existe déjà.

        • Partager sur Facebook
        • Partager sur Twitter
          20 janvier 2017 à 11:41:51

          Tu peux très bien faire:

          UPDATE maTAble SET toto = "toto" WHERE id=1234568

          tester le retour VRAI / FAUX

          Si FAUX => tu insères

          INSERT INTO maTable (toto)
          VALUE
          ("toto")

          A ce moment, la ligne aura un identifiant autre que 1234568 mais bon là OSEF

          ++


          • Partager sur Facebook
          • Partager sur Twitter
            20 janvier 2017 à 12:40:09

            Très bien merci , pour tester le retour, j'ai le droit de faire :

            $req =$link->prepare('UPDATE synthese_dev_sw SET type = ?, Complexite = ?, Date_Lancement = ?, Date_Livraison = ?, Commentaires = ? WHERE id = 0 '); // modifie l'entrée : Date de lancement.
            
             	$req->execute(array($this->type_sw,$this->complexite_sw,$this->date_lancement,$this->date_livraison,$this->commentaire)); 
            
             	if($req == true)
             	{
             		// code
             	} else if {
             		//requete INSERT INTO 
             	}



            ? ( j'utilise comme vous pouvez le constater le PDO ).

            Edit

            -
            Edité par DimitriNeker1 20 janvier 2017 à 12:43:39

            • Partager sur Facebook
            • Partager sur Twitter
              20 janvier 2017 à 12:41:33

              copie colle le code dans les balises => bouton </> + PHP là 1) on ne voit rien, 2) on ne peut pas copier / coller pour corriger ton code.

              Merci.

              ++

              • Partager sur Facebook
              • Partager sur Twitter
                20 janvier 2017 à 12:45:29

                Dois je passer par une fonction PHP ou simplement récupérer la valeur de retour(comme le code que j'ai mis )?
                • Partager sur Facebook
                • Partager sur Twitter
                  20 janvier 2017 à 13:01:07

                  là c'est bon ;).

                  ton code comme tu devrais l'avoir pour tester le retour d'execute:

                  <?php
                      //Nomme les variable pour ce qu'elles sont vraiment
                      $requete = 'UPDATE synthese_dev_sw SET type = :type, Complexite = :Complexite , Date_Lancement = :Date_Lancement, Date_Livraison = :Date_Livraison , Commentaires = :Commentaires  WHERE id = :id';
                  
                      //prepare la requete UPDATE
                      $stmt = $link->prepare($requete); 
                  
                      //Bind des données
                      $stmt->bindValue('type',$this->type_sw);
                      $stmt->bindValue('Complexite',$this->type_sw);
                      $stmt->bindValue('Date_Lancement',$this->type_sw);
                      $stmt->bindValue('Date_Livraison',$this->type_sw);
                      $stmt->bindValue('Commentaires',$this->type_sw);
                      $stmt->bindValue('id',$id);
                  
                      if (!$stmt->execute()) {
                          echo 'ERREUR EXECUTE UPDATE';
                      } else {
                          //UPDATE OK mais sur combien de lignes ???
                          $nbLignesAffectees = $stmt->rowCount();
                          if ($nbLignesAffectees == 0) {
                              //pas de lignes affectes => on doit inserer
                              $requete = 'INSERT INTO synthese_dev_sw (type,Complexite,Date_Lancement,Date_Livraison,Commentaires)';
                              $requete .= ' VALUES ';
                              $requete .= '(:type,:Complexite,:Date_Lancement,:Date_Livraison,:Commentaires)';
                  
                              //prepare la requete INSERT
                              $stmt2 = $link->prepare($requete); 
                  
                              //Bind des données
                              $stmt2->bindValue('type',$this->type_sw);
                              $stmt2->bindValue('Complexite',$this->complexite_sw);
                              $stmt2->bindValue('Date_Lancement',$this->date_lancement);
                              $stmt2->bindValue('Date_Livraison',$this->date_livraison);
                              $stmt2->bindValue('Commentaires',$this->commentaire);
                              $stmt2->bindValue('id',$id);
                  
                              if (!$stmt2->execute()) {
                                  echo 'ERREUR EXECUTE INSERT';
                              } else {
                                  echo 'Nouvelles donnees inserees';
                              }
                          } else if ($nbLignesAffectees > 1) {
                              //si ID en auto increment tu ne dois JAMAIS passer ici, mais il faut y penser on ne sait jamais
                              echo 'ERREUR id "'.$id.'" DUPLIQUE A CORRIGER';
                          }
                      }

                  A tester ;)

                  • Partager sur Facebook
                  • Partager sur Twitter
                    20 janvier 2017 à 15:03:29

                    Merci beaucoup! Cela fonctionne cependant je trouve le "code lourd", ma méthode n'est pas suffisamment efficace?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      20 janvier 2017 à 15:07:44

                      ce code que tu dis "lourd" est correct au point de vu sécurité et des tests nécessaires, car execute() renvoie TRUE si UPDATE est fait => pas besoin de INSERT et FALSE si il y a une erreur PDO.

                      en comptant le nombre d'enregs modifiés, tu es sûr à 100% de ce que tu fais.

                      ++

                      Personnellement j'ai créé une classe qui s'occupe de l'interface avec ma BD, je lui passe une requête à préparer, un tableau associatif de données et elle fait tout seule comme une grande ^^

                      je ne vois pas où tu vois cette lourdeur.

                      -
                      Edité par christouphe 20 janvier 2017 à 15:11:10

                      • Partager sur Facebook
                      • Partager sur Twitter
                        25 janvier 2017 à 14:06:28

                        Bonjour,

                        Par "lourd" je veux dire par rapport à ma proposition(qui parait peut être limité en matière de sécurité). Est -elle inefficace et quelles est sa limite?

                        Merci beaucoup pour l'aide apporté.  

                        • Partager sur Facebook
                        • Partager sur Twitter
                          25 janvier 2017 à 14:11:05

                          Sa limite:

                          1) les marqueurs ? imposent que les variables soient misent dans le tableau dans l'ordre,

                          2) tu testes true/false d'execute, mais pas le nombre de lignes sur lesquelles l'UPDATE a eu lieu => si 0 erreur si > 1 erreur et ton code ne teste pas cela.

                          ++

                          • Partager sur Facebook
                          • Partager sur Twitter

                          UPDATE/CREATE

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown