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 :

ajout si existe pas en PDO [PDO]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut ajout si existe pas en PDO
    Bonjour,
    J'ais opté pour cette méthode, pour controler "si existe" avant ajout.
    Cependant cela me parait lourd, et je penses qu'il doit exister plus directe .Pouvez vous m'aider a simplifier cette méthode
    Merci d'avance

    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
    24
    $billet = "son_mail";
    try
     {
     $bdd = new PDO('mysql:host=localhost;dbname=tabase', 'root', '');
     $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     }
      catch(Exception $e)
        {
    	die('Erreur : '.$e->getMessage());
        }
    $req = $bdd->prepare('SELECT * FROM user WHERE UserMail = ?');
     $req->execute(array($billet));
     if(!$donnees = $req->fetch())
     {
      //============c' est OK existe pas donc on crée================
    $result = $bdd->prepare("INSERT INTO `user`
       ( `UserNom`,`UserMail`, `UserPas`)
        VALUES      (:UserN, :UserM,  :UserP)");
    $result->execute(array(':UserN' => $UserNom, ':UserM' => $billet,':UserP' => $UserPas));
     }
     else
      {
      echo "Désolé ".$billet." existe déjas";
      }

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    faut définir ton champs en unique, ensuite tu récupères l'erreur

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    faut définir ton champs en unique, ensuite tu récupères l'erreur
    Merci de ta réponse, ça donnerait quoi comme code s'il te plait

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par mauriser Voir le message
    Merci de ta réponse, ça donnerait quoi comme code s'il te plait
    juste comme ca :

    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
    $result = $bdd->prepare("INSERT INTO `user` (`UserNom`, `UserMail`, `UserPas`) 
                             VALUES  (:UserN, :UserM,  :UserP)");
     
    try 
    {
        $result->execute(array(':UserN' => $UserNom, 
                               ':UserM' => $billet,
                               ':UserP' => $UserPas));
    }
    catch(PDOException $e)
    {
        if($e->getCode() == 23000)
        {
            echo sprintf("Désolé %s existe déja", $billet);        
        }
        else
        {
        	exit($e->getMessage());
        }
    }

  5. #5
    Invité
    Invité(e)
    Par défaut
    Whaou super merci c'est trés simple ..

  6. #6
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 495
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 495
    Par défaut
    Salut,

    une idee comme ca (qui a du sens quand meme xD)

    comme il existe la requete de type
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE TABLE IF NOT EXISTS `ta_table`;
    oubien
    DROP TABLE IF EXISTS `ta_table`;
    peut-etre qu'il existe des requetes du type
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO `ta_table` IF NOT EXISTS VALUES(...);
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par mauriser Voir le message
    Whaou super merci c'est trés simple ..

    c'est dans l'optique que ton champs sois bien en index unique par contre, et faut pas forcement chercher a simplifié, ton code de base est tout a fait viable

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

Discussions similaires

  1. Ajouter une ligne si elle n'existe pas dans la table
    Par daimadoshi dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 19/11/2010, 15h52
  2. Jtree : ajout d'un noeud s'il n'existe pas déjà
    Par babap1 dans le forum Composants
    Réponses: 0
    Dernier message: 24/03/2009, 17h32
  3. Ajouter champ si il n'existe pas
    Par Nicomart dans le forum Requêtes
    Réponses: 1
    Dernier message: 25/06/2008, 16h53
  4. Recherche client + ajout si n'existe pas
    Par Webby1234 dans le forum Access
    Réponses: 1
    Dernier message: 12/05/2008, 19h49
  5. ajouter des lignes qd elles n'existent pas
    Par freestyler dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 30/01/2008, 15h28

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