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 :

Problème pour connaitre l'id de l'enregistrement récement créé [ODBC]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 194
    Points : 118
    Points
    118
    Par défaut Problème pour connaitre l'id de l'enregistrement récement créé
    Bonjour, je programme en intranet sur PHP et Oracle.
    Suite à un formulaire de traitement je doit enregistrer les valeurs dans une table dont l'id n'est pas automatique mais reste unique.

    je fais comme cela pour enregistrer un nouveau traitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT INTO traitements (ID)
    VALUES ((SELECT MAX(ID) + 1 FROM traitements WHERE ID LIKE 'DV%'))
    Note : Je n'ai pas mis les autres champs, mais sachez qu'il y en a une bonne quarantaine !!

    Ce que je voudrais c'est : Est-ce qu'il existe un moyen simple, rapide, léger (j'en demande peut-être trop là) qui me permette d'obtenir le n° d'ID qui sera utilisé pour l'enregistrement, afin que je puisse l'utiliser lors du rafraichissement de ma page (pour la récupération des informations dans la table).
    Une fonction "odbc_quelquechose" peut être ?

    J'ai bien pensé de faire un SELECT en 1er lieu puis de rajouter mon traitement ensuite mais supposons que quelqu'un d'autre soit plus rapide, cela risque de générer des erreurs du fait que plusieurs utilisateurs peuvent enregistrer des traitements en même temps.

    Merci pour vos réponses.
    Si tout semble bien marcher c'est que vous avez oublié quelque chose !

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 194
    Points : 118
    Points
    118
    Par défaut
    bon j'ai trouvé la solution tout seul :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT MAX(ID) FROM traitements WHERE ID LIKE 'DV%' AND user = '".$user."'
    EDIT : bon c'est pas une vraie solution puisque comme Oracle est asynchrone et que si un utilisateur ouvre 2 sessions ça peut poser problème...

    Bon plus qu'à utiliser mes 45 champs...
    Si tout semble bien marcher c'est que vous avez oublié quelque chose !

  3. #3
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 021
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 021
    Points : 2 278
    Points
    2 278
    Par défaut
    Salut,
    tu peux tenter cette syntaxe qui devrait fonctionner, en 2 requêtes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT INTO traitements (ID)
    VALUES ((SELECT MAX(ID) + 1 INTO @x  FROM traitements WHERE ID LIKE 'DV%'))
    puis :

    Ca te crée une variable locale à la connexion. A priori, il ne devrait pas y avoir de problème d'accès concurrentiels.
    Bye

    La version de test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT MAX(id) INTO @x FROM `table`;
    SELECT @x;
    Vive les roues en pierre

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

Discussions similaires

  1. Problème pour connaitre la taille d'un composant
    Par Djelangelo dans le forum Composants VCL
    Réponses: 4
    Dernier message: 15/04/2011, 15h07
  2. Réponses: 16
    Dernier message: 23/08/2010, 17h03
  3. Réponses: 5
    Dernier message: 02/05/2008, 16h28
  4. Réponses: 4
    Dernier message: 11/06/2006, 20h04
  5. [VBA-E] Problème pour enregistrer en csv (; et non ,) par macro
    Par bounette dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/12/2005, 10h34

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