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 :

PDO insert et champs auto incremente ? [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2002
    Messages : 726
    Points : 352
    Points
    352
    Par défaut PDO insert et champs auto incremente ?
    bonjour,
    quand j'execute ma requete avec un nouveau email, tout est parfait
    mais quand j'essaye de l'exécuter plusieurs fois avec la même valeur email, il y a exception
    c'est tout a fait normal car le champs email dans la table est unique.

    le probleme quand je modifie l'email avec un nouveau email qui n'existe pas dans la table la requette est exécuté avec succès
    mais j'ai perdu beaucoup de valeurs du champs ID qui est auto incremente
    donc c'est un problème que je veux eviter
    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
     
    public function registerNewUser($firstname, $name, $email) {
            /* enregistrer un nouveau utilisateur */
     
            $query = 'INSERT INTO user (user_firstname, user_name, user_email)'
                    . ' VALUES (:user_firstname, :user_name, :user_email);';
     
            $prep = $this->pdo->prepare($query);
     
            $prep->bindValue(':user_firstname', $firstname, PDO::PARAM_STR);
            $prep->bindValue(':user_name', $name, PDO::PARAM_STR);
            $prep->bindValue(':user_email', $email, PDO::PARAM_STR);
     
            $prep->execute();
     
            $prep = NULL;
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $test = new crud();
    $test->registerNewUser('yyy', 'XXXX', 'exemple@gmail.com');

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu ne devrais pas te préoccuper des id ils la pour être jettables et "à volonté" justement.
    Si tu as des mécanismes qui reposent sur la continuité des ids : ces mécanismes sont mauvais.

    D'un point de vue applicatif par contre il peut être interessant de signaler que l'email n'est pas valable. Il suffit de faire un SELECT pour contrôler avant de faire l'INSERT.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Il vaudra toujours mieux avoir plusieurs dizaines d'ids d'écart en base de données entre deux lignes réellement existantes plutôt qu'une base de données avec des contraintes relationnelles qui sont incorrectes.

    Les identifiants ne doivent absolument avoir aucune signification pour nous ("êtres humains"), ils sont juste là pour identifier clairement et informatiquement la ligne en question.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2002
    Messages : 726
    Points : 352
    Points
    352
    Par défaut
    merci pour vos réponse,
    y a pas d'erreur ou d'incohérence de données dans la base, c'est juste je suis un avare en quelque sorte
    je voulais juste prévoir de ne pas gaspiller les ID inutilement.
    je vais faire un select sur l'email pour tester l'existence avant de lancer insert c'est la seule méthode pour le moment je crois
    encore merci.

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    un SMALLINT c'est déjà 65535 ids, ca fait déjà beaucoup d'inscrit dans ton système non ?
    un INT c'est 4 milliards d'ids.

    Il n'y a pas lieu de raisonner en economie d'ids.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2002
    Messages : 726
    Points : 352
    Points
    352
    Par défaut
    j'ai rajouté ça au code et ça marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    /*rechercher si email existe*/
    		$query = 'SELECT user_email FROM user WHERE user_email = ?';
            $prep = $this->pdo->prepare($query);
            $prep->execute(array($email));
            $row = $prep->fetchAll();
    		$prep = NULL;
     
    		/* enregistrer un nouveau utilisateur */
     
    		if(count($row) == 0){ // email n'existe pas
                    ........
                    ..... suite du code  .....
    encore merci

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

Discussions similaires

  1. ibquery champs auto increment insert retour numéro
    Par ouiouioui dans le forum Bases de données
    Réponses: 2
    Dernier message: 25/08/2010, 17h26
  2. insertion d'un champ auto incrementé
    Par daguet dans le forum Langage SQL
    Réponses: 4
    Dernier message: 10/03/2009, 16h12
  3. Champ auto increment
    Par webbulls dans le forum Bases de données
    Réponses: 9
    Dernier message: 21/04/2004, 16h07
  4. Remise à zero champ auto-incrementé (SQL Server)
    Par James85 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 26/01/2004, 09h23
  5. Nom du champs auto-incrementé
    Par norroy dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/06/2003, 18h30

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