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

Requêtes MySQL Discussion :

LAST_INSERT_ID mauvaises valeurs


Sujet :

Requêtes MySQL

  1. #1
    Membre averti Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Points : 332
    Points
    332
    Par défaut LAST_INSERT_ID mauvaises valeurs
    Bonjour!

    Voilà, je suis un peu ennuyé.

    J'ai deux tables avec une jointure.
    ma table A(id_primA), et ma table B(id_primB, id_primA).

    Lorsque je créé un enregistrement, j'insère 2 lignes dans A et B, qui sont liées par la même valeur de id_primA.
    Je fais quelque chose du goût de :

    INSERT INTO A ...
    INSERT INTO B(id_primA,...) VALUES(LAST_INSERT_ID(),...)


    Ca marchait à peu près bien, mais maintenant plus du tout. La valeur de mon autoincrement sur ma table A est : 10858

    Ma dernière ligne rentrée dans A :
    (10857,...)
    Donc là c'est bon.
    Et dans B :
    (46065,...)



    J'ai fait une suppression massive dans la table A, mais l'autoincrement n'a pas bougé, donc là j'avoue je comprends pas bien le comportement de MySQL? Toute mon appli est totalement buggée à cause de ça du coup...

    Vous avez déjà vu ça, vous savez d'où ça peut venir ?

    Sinon il y a t'il une solution autre que LAST_INSERT_ID ? Parce que j'utilisais MAX avant qui me semblait un peu sale comme méthode, mais je vois dans des forum que s'il y a plus d'une insertion, l'id renvoyé est le premier id renvoyé, donc en fait à terme je risque d'avoir des soucis avec ça aussi...
    Linio

  2. #2
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 324
    Points
    4 324
    Par défaut
    J'ai fait une suppression massive dans la table A, mais l'auto-increment n'a pas bougé
    Attention, l'auto-incrément a pour rôle comme son nom l'indique d'incrémenter.
    Si tu delete des occurrences il reviendra pas en arrière et continua à toujours incrémenter.
    http://alaindefrance.wordpress.com
    Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
    SDE at BitTitan

  3. #3
    Membre averti Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Points : 332
    Points
    332
    Par défaut
    Ben je sais bien justement, ça ne m'intéresse pas du tout qu'il se décrémente, au contraire pour l'intégrité, c'est le comportement que je veux.

    Mais là l'autoincrement n'a pas bougé justement, donc je ne comprends pourquoi ça déraille d'un coup ...?
    Linio

  4. #4
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 324
    Points
    4 324
    Par défaut
    J'ai fait une suppression massive dans la table A, mais l'autoincrement n'a pas bougé, donc là j'avoue je comprends pas bien le comportement de MySQL
    C'est à cela que je répondais plus haut, et du coup je ne comprend plus ton problème :/
    http://alaindefrance.wordpress.com
    Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
    SDE at BitTitan

  5. #5
    Membre averti Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Points : 332
    Points
    332
    Par défaut
    Ben justement mon problème c'est que j'ai une valeur d'autoincrement pour ma table A, lorsque je fais une (et une seule) insertion sur cette table, l'autoincrement est respecté et tout va bien, et quand je fais à la suite un LAST_INSERT_ID() c'est une valeur toute autre qui m'est renvoyée...

    Du coup je comprends pas trop, sur quoi se base LAST_INSERT_ID()? Parce que là ça ne se base ni sur le dernier ID effectivement rentré, ni sur la valeur de l'autoincrement...
    Linio

  6. #6
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 324
    Points
    4 324
    Par défaut
    il existe une équivalence mais qui je pense appelle LAST_INSERT_ID()

    http://fr2.php.net/manual/fr/functio...-insert-id.php

    Je ne sais pas si ça changera quelque chose.
    http://alaindefrance.wordpress.com
    Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
    SDE at BitTitan

  7. #7
    Membre averti Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Points : 332
    Points
    332
    Par défaut
    J'y avais pensé, mais ça m'embête quand même un peu.
    J'aime bien comprendre de manière générale comment fonctionne les choses.
    J'essaye ça demain, et je vois si ça marche, mais comme toi je pense que ça fait appel à cette fonction, donc j'en doute.
    Linio

  8. #8
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 901
    Points : 6 026
    Points
    6 026
    Par défaut
    Citation Envoyé par Linio Voir le message
    ma table B(id_primB, id_primA).

    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO B(id_primA,...) VALUES(LAST_INSERT_ID(),...)
    mettre IdA pour la valeur de IdB...

    1 erreur de transcription ?

    Peux-tu fournir la description de ces tables, la version de MySQL ?

    Te sers-tu d'InnoDB ?
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  9. #9
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 41
    Points : 36
    Points
    36
    Par défaut
    J'ai du mal a saisir e que tu cherches a obtenir , mais je pense que tu fais erreur en utilisant le LAST_INSERT_ID de MySQL, qui dans ton exemple te renvoie le dernier enregistrement de Table B (or si j'ai bien compris c'est l'enregistrement de table A que tu veux).
    Il faut utiliser le mysql_insert_id ([ resource $link_identifier ] de PHP entre les deux insertions

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $insert = 'INSERT INTO tbl_A VALUES(...)';
     
    $result = mysql_query($insert,$link) or die ();
    $last_id = mysql_insert_id();
     
    $add = 'INSERT INTO tbl_B(id_primA,...) VALUES('.$last_id.',...)';
    $result = mysql_query($add,$link) or die ();
    ++

  10. #10
    Membre averti Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Points : 332
    Points
    332
    Par défaut
    Hum...

    J'ai trouvé mon problème...

    L'administrateur système m'a rajouté une requête de vérification dans la fonction de query de notre objet de gestion de la base de donnée.
    Du coup c'était cet identifiant qui était récupéré...

    Désolé pour tout le toutim, merci pour les précisions dans tous les cas.
    Linio

  11. #11
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 41
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par Linio Voir le message
    Hum...

    J'ai trouvé mon problème...

    L'administrateur système m'a rajouté une requête de vérification dans la fonction de query de notre objet de gestion de la base de donnée.
    Du coup c'était cet identifiant qui était récupéré...

    Désolé pour tout le toutim, merci pour les précisions dans tous les cas.


    sinon pour l'identifiant de connection si tu fais pas de mysql_close() entre deux requete, t'a pas besoin de le preciser dans la fonction mysql_inser_id() (ou utilsation de 2 bases par exemple)

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

Discussions similaires

  1. Problème fread() mauvaises valeurs
    Par Aymarick dans le forum Bibliothèque standard
    Réponses: 8
    Dernier message: 14/05/2008, 22h58
  2. [Tableaux] Mauvaises valeurs renvoyées
    Par Jeren dans le forum Langage
    Réponses: 5
    Dernier message: 05/05/2008, 09h49
  3. mauvaises valeurs en sortie
    Par emprex dans le forum Débuter
    Réponses: 9
    Dernier message: 07/02/2008, 19h25
  4. Réponses: 8
    Dernier message: 17/07/2007, 11h33
  5. Fonction Get() renvoyant les mauvaises valeurs
    Par jairbubbles dans le forum XML
    Réponses: 1
    Dernier message: 20/11/2006, 12h33

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