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 :

géré UNIQUE KEY avec PDO


Sujet :

PHP & Base de données

  1. #1
    HwRZxLc4
    Invité(e)
    Par défaut géré UNIQUE KEY avec PDO
    Bonjour,

    J'ai une table dans la quelle ce trouve un chan email mi en "UNIQUE KEY".

    Je voudrais géré en fonction de la présence ou non de l'adresse mail genre :

    Si l'adresse mail est présente je mes à jour "#1062 - Duplicate entry 'mimail@test.com' for key 'email' "

    Si non je l'ajoute "INSERT ...."

    seulement avec PDO je ne voie vraiment pas comment on peux gérer cela.

    Merci d'avance pour votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    assez enfantin mais au moins c'est fiable...
    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
    25
     
    $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";
      }

  3. #3
    HwRZxLc4
    Invité(e)
    Par défaut
    Merci pour la réponse, je pensais pas faire comme ça mais si c'est la solution, je l'applique.

    Bonne journée

    Librement.

  4. #4
    HwRZxLc4
    Invité(e)
    Par défaut
    On peux aussi faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $req = $bdd->prepare('SELECT * FROM user WHERE UserMail = ?');
    $verif = $req->execute(array($billet));
     if($verif !== FALSE)
     {
    .....
    Juste ?

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Non, c'est faux : il faut faire un fetch, pour le déterminer. La méthode execute ne renvoie qu'une valeur qui indique si l'exécution de la requête préparée a échoué ou non (cette condition serait toujours vérifiée ...).

    Un SELECT COUNT/fetchColumn serait peut être mieux d'ailleurs ? (il existe éventuellement INSERT IGNORE/rowCount).

  6. #6
    HwRZxLc4
    Invité(e)
    Par défaut
    Ok, je te remercie.

Discussions similaires

  1. [PDO] requête sql avec PDO impossible
    Par HALOMOTO dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/03/2009, 00h17
  2. Table sans primary key avec Hibernate
    Par zizou771 dans le forum Hibernate
    Réponses: 1
    Dernier message: 28/02/2007, 15h58
  3. [PDO] Pb instanciation $statement avec PDO sous PHP
    Par tigunn dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 22/02/2007, 20h45
  4. Foreign Key avec MySQL / phpMyAdmin ?
    Par Tchupacabra dans le forum Outils
    Réponses: 4
    Dernier message: 13/12/2006, 15h59
  5. on duplicate key avec un select au lieu d'update ?
    Par pony dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/10/2006, 15h05

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