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 question sur lastInsertId() et auto-increment [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 26
    Par défaut PDO question sur lastInsertId() et auto-increment
    Bonjour à tous,

    Voila, depuis ce matin je sèche sur un point que je vais essayer d'expliquer.
    J'ai une base de donnée à laquelle j'accède par des commandes PDO.
    C'est en l'occurrence une bdd mysql en innoDB.

    Dans une table j'ai un champs 'id' auto-incrémenté et je souhaite en récupérer
    la valeur tout de suite après un insert.

    La question que je me pose est, sachant que la bdd autorise les accès et
    écritures simultanés, il doit arriver des cas où la valeur retournée par
    lastinsertId() pour un premier insert sera l'Id d'un suivant.

    Si le problème existe comme je le pense, comment le contourner, et si
    non, quelles sont les garanties d'avoir le bon id (la doc n'en parle pas)?

    Petit exemple avec deux utilisateurs (pour éclaircir au cas où).
    2 utilisateurs U1, U2
    U1 lance Insert à t l'id auto-incrémenté est I1
    U2 lance Insert à t+x x>0 et l'id auto-incrémenté est I2
    U1 lance lastinsertId() à t+y y>x et la valeur de retour est I2 (on souhaite I1!)

    Je suis ouvert à toutes autres façons de récupérer l'id différentes de lastinsertId
    avec PDO. Je reste sur celle-ci pq c'est la seule qui semblait faire ça.

    Merci.

  2. #2
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    Citation Envoyé par lounislounis Voir le message
    U1 lance lastinsertId() à t+y y>x et la valeur de retour est I2 (on souhaite I1!)
    ce n'est pas ça, lastinsertId() retourne la valeur de la dernière insertion de la connexion courante c'est à dire la connexion fait par l'utilisateur U1 et donc la fonction retourne bien "I1" comme prévu

    si tu veux être sûr d'avoir des données cohérentes dans ta base de données, regarde cet article sur les transactions :
    http://sqlpro.developpez.com/isolation-transaction/

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 26
    Par défaut Okay!
    Salut,

    Avant tout merci pour ta réponse, elle répond bien à mon inquiétude.
    Je découvre seulement cet aspect du sujet et au moins comme ça c'est clair.

    Je vais jeter un œil au lien que tu m'a filé sous peu et en attendant je
    marque le sujet comme résolu.

    Merci encore!

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

Discussions similaires

  1. Auto Increment sur champs numérique
    Par Sami Xite dans le forum Access
    Réponses: 19
    Dernier message: 09/02/2007, 16h40
  2. Auto-increment et cles etrangeres sur diferents sgdb.
    Par jota5450 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 26/09/2006, 11h57
  3. Auto-increment est il sur
    Par jeff_! dans le forum Outils
    Réponses: 4
    Dernier message: 30/08/2006, 11h26
  4. [debutant]Auto incrementation sur sql-server 2000
    Par syl2095 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 18/11/2004, 18h00
  5. Pb d'auto-incrément sur une table v7
    Par Nivux dans le forum Paradox
    Réponses: 9
    Dernier message: 26/12/2002, 12h05

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