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 :

[PostGreSQL] Insertion et récupération d'identifiant


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé Avatar de bambou
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2004
    Messages : 192
    Par défaut [PostGreSQL] Insertion et récupération d'identifiant
    Bonjour,

    Je suis dans un cas, qui me parrait assez courrant mais sur lequel ma solution me parait pas trés jolie...

    Prenons une table toute bête avec 2 champs, par exemple une table "Projets" :
    - un entier auto-incrémenté, indentifiant unique et clé primaire du projet
    - une chaine, représentant le nom d'un projet

    Je dois faire une fonction qui renvoi l'identifiant en prenant en parametre le nom, et qui dois inserer le tupple si jamais il n'existe pas



    Ma premiere solution a consisté a faire directement la requete d'insertion, et si elle renvoyait une erreur autre que "duplicate key", j'affichais l'erreur sinon je faisais mon select et revoyais l'identifiant...mais...


    Ma configuration est la suivante : PHP4 et postgresSQL 8.1

    PHP4 n'ayant pas de try/catch, si j'ai une erreur sur ma requete d'insertion, elle est affichée..(naturelement, il n'est pas question d'inhiber les message sd'erreurs/warnings du serveur)



    Ma solution pas trés jolie consiste, dans le pire des cas et malheureusement le plus courrant, à effectuer 3 requetes :

    requete 1) Un premier select qui test l'existance du projet
    requete 2) Le projet n'existe pas, je l'insere
    requete 3) Je refais un select pour récupérer l'identifiant fraichement créé

    Je trouve ça pas trés jolie et avoir autant de requete augmente les chances d'erreurs...n'y a-t-il pas un moyen d'en diminuer le nombre?

    merci à tous

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Par défaut
    Salut,

    Si je comprends bien ton problème, ce que tu cherches est une fonction qui retournerais l'ID du dernier INSERT effectué.
    Je sais que ça existe sur MySQL (mysql_insert_id()). J'imagine que pour postgres une fonction équivalente existe également, tu as regardé dans les docs ? Tu peux peut-être également regarder/poser la question dans le forum spécifique a postgres

  3. #3
    Membre confirmé Avatar de bambou
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2004
    Messages : 192
    Par défaut
    j'ai regardé la doc, mais j'ai rien trop vu qui ressemblerai à ça...

    je vais poster dans le forum postgres...desfois que j'aurais loupé quelques choses

    merci pour ta réponse

  4. #4
    Membre chevronné

    Avatar de Deepin
    Homme Profil pro
    Ingénieur - Chef de projet Modélisation/Simulation
    Inscrit en
    Avril 2004
    Messages
    3 164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afrique Du Sud

    Informations professionnelles :
    Activité : Ingénieur - Chef de projet Modélisation/Simulation
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 164
    Par défaut
    Hello,
    As tu vraiment besoin de l'etape n°3 ? Car à l'etape n°1 il me semble que si ton projet existe tu le recupere directement.
    Tu peux aussi imaginer de faire une fonction getOrCreateProject() par exemple.
    A++

  5. #5
    Membre confirmé Avatar de bambou
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2004
    Messages : 192
    Par défaut
    Citation Envoyé par buns
    Tu peux aussi imaginer de faire une fonction getOrCreateProject() par exemple.
    A++
    c'est exactement ce que je fait...dans tout les cas la fonction renvoi un ID, mais si le projet existe pas, elle le crée

    Citation Envoyé par buns
    Hello,
    As tu vraiment besoin de l'etape n°3 ? Car à l'etape n°1 il me semble que si ton projet existe tu le recupere directement.
    Si le projet n'existe pas, l'étape 1 ne me renvoi rien, je passe donc à l'etape 2, puis à l'étape 3 pour récuperer l'identifiant du projet crée à l'étape 2

    Effectivement si le projet existe, je ne passe pas par les etapes 2 et 3, je renvoi direct l'ID renvoyé par la requete de l'étape 1

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/03/2008, 14h35
  2. insertion et récupération de fichiers pdf
    Par meghaoui dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/04/2007, 13h21
  3. [JDBC] [PostgreSQL] Insert d'un serial
    Par e1lauren dans le forum JDBC
    Réponses: 3
    Dernier message: 16/05/2006, 15h57
  4. [Oracle] Insert avec récupération valeur de la cle
    Par Silvia12 dans le forum Oracle
    Réponses: 2
    Dernier message: 11/03/2006, 03h28
  5. [Postgresql] insertion sans doublon
    Par Pwill dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 08/06/2005, 11h37

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