1. #1
    Membre chevronné
    Homme Profil pro
    Analyste développeur
    Inscrit en
    juin 2010
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : juin 2010
    Messages : 310
    Points : 601
    Points
    601

    Par défaut Recupérer du dernier sur postgres

    Bonjour,

    J'essaye d'obtenir le dernier id de ma requête d'insert sur postgres. Sur mysql je faisais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $id = mysql_insert_id() ;
    Mais sur postgres je n'y arrive pas, j'ai essayé ça, mais je n'arrive pas a récupérer l'id.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // insertion dans la base de données
    $requete = "insert into personne (login, nom, prenom, email, mdp) values ('". $login ."', '".$nom ."', '".$prenom."', '".$email."', '".$mdp."')";
    pg_query ( $requete );
    
    $id = $requete . 'RETURNING id';
    Pouvez vous m'aider ?

    John.

  2. #2
    Membre émérite

    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    décembre 2008
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : décembre 2008
    Messages : 365
    Points : 801
    Points
    801

    Par défaut

    Salut!

    Pour ta requête il faut faire comme ça:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO personne (login, nom, prenom, email, mdp) VALUES ('$login', '$nom', '$prenom', '$email', '$mdp') RETURNING id

    Ensuite je te suggère de respecter les normes pour les mots réservés en SQL. Ces mots doivent être en majuscule, ça offre une meilleur lisibilité et certains SGBD apprécient pas les minuscules

    Pour la partie PHP ta concaténation est fonctionnelle mais invalide. Lors de l'utilisation de doubles quotes " les variables contenues dans ton string sont traitées, donc le mieux est de faire comme ceci:
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql= "INSERT INTO personne (login, nom, prenom, email, mdp) VALUES ('$login', '$nom', '$prenom', '$email', '$mdp') RETURNING id";
    $req = pg_query ($sql);
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($toBe || !$toBe) echo 'That is the question';

    Mes projets: DVP I/O

  3. #3
    Membre chevronné
    Homme Profil pro
    Analyste développeur
    Inscrit en
    juin 2010
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : juin 2010
    Messages : 310
    Points : 601
    Points
    601

    Par défaut

    Bonjour et merci pour ta réponse.

    J'ai fais comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql= "INSERT INTO personne (login, nom, prenom, email, mdp) VALUES ('$login', '$nom', '$prenom', '$email', '$mdp') RETURNING idpersonne";
    $id = pg_query ($sql);
    echo $id;
    J'ai un message qui me dit Resource id #5, alors que celui que je viens d'ajouter c'est le 3ème.

    Avant lorsque je faisais directement F5 pour rafraichir la page, après une inscription, ça me faisait plusieurs messages d'erreurs sur le code qui se trouve dans le fichier.php qui gère l'inscription. Pour que les erreurs s'enlèvent, il fallait que je déconnecte le compte du client, que je me reconnecte, que je revienne dans inscription.php et la page n'affiche plus d'erreurs. Voici l'endroit où il y a des erreurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // Si un client est log
    if(isset($_SESSION["id"])){ 
    	// s'il est connecté, récupération de ses informations personnelles
            $curseur = pg_query("select * from personne where idpersonne=".$_SESSION["id"]) ;
    	$login = pg_result($curseur, 0, "login") ;
    	$nom = pg_result($curseur, 0, "nom") ;
    	$prenom = pg_result($curseur, 0, "prenom") ;
    	$email = pg_result($curseur, 0, "email") ;
    	$mdp = pg_result($curseur, 0, "mdp") ;
    }
    La première erreur était sur le pg_query, mais grâce a ta réponse, cette erreur ne figure plus. Mais malheureusement il y a toujours les autres lignes d'erreurs qui étaient présente auparavant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Warning: pg_result() [function.pg-result]: Unable to jump to row 0 on PostgreSQL result index 6 in C:\Program Files (x86)\EasyPHP-5.3.9\www\harmonix\inscription.php on line 42
     
    Warning: pg_result() [function.pg-result]: Unable to jump to row 0 on PostgreSQL result index 6 in C:\Program Files (x86)\EasyPHP-5.3.9\www\harmonix\inscription.php on line 43
     
    Warning: pg_result() [function.pg-result]: Unable to jump to row 0 on PostgreSQL result index 6 in C:\Program Files (x86)\EasyPHP-5.3.9\www\harmonix\inscription.php on line 44
     
    Warning: pg_result() [function.pg-result]: Unable to jump to row 0 on PostgreSQL result index 6 in C:\Program Files (x86)\EasyPHP-5.3.9\www\harmonix\inscription.php on line 45
     
    Warning: pg_result() [function.pg-result]: Unable to jump to row 0 on PostgreSQL result index 6 in C:\Program Files (x86)\EasyPHP-5.3.9\www\harmonix\inscription.php on line 46
    Aurais-tu une idée ?

  4. #4
    Membre émérite

    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    décembre 2008
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : décembre 2008
    Messages : 365
    Points : 801
    Points
    801

    Par défaut

    Que retourne ceci?
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Ta requête
    var_dump($id);
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($toBe || !$toBe) echo 'That is the question';

    Mes projets: DVP I/O

  5. #5
    Membre chevronné
    Homme Profil pro
    Analyste développeur
    Inscrit en
    juin 2010
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : juin 2010
    Messages : 310
    Points : 601
    Points
    601

    Par défaut

    Ça me retourne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <pre class='xdebug-var-dump' dir='ltr'><b>resource</b>(<i>5</i><font color='#2e3436'>,</font> <i>pgsql result</i>)
    </pre>Resource id #5

  6. #6
    Membre chevronné
    Homme Profil pro
    Analyste développeur
    Inscrit en
    juin 2010
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : juin 2010
    Messages : 310
    Points : 601
    Points
    601

    Par défaut

    En faisant ceci, ça marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql= "INSERT INTO personne (login, nom, prenom, email, mdp) VALUES ('$login', '$nom', '$prenom', '$email', '$mdp') RETURNING idpersonne";
    $curseur = pg_query ( $sql );
    $id = pg_result ( $curseur, 0, "idpersonne" );

  7. #7
    Expert Confirmé
    Profil pro
    Inscrit en
    octobre 2008
    Messages
    1 846
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 846
    Points : 2 806
    Points
    2 806

    Par défaut

    Citation Envoyé par Johngtrs Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql= "INSERT INTO personne (login, nom, prenom, email, mdp) VALUES ('$login', '$nom', '$prenom', '$email', '$mdp') RETURNING idpersonne";
    $id = pg_query ($sql);
    echo $id;
    J'ai un message qui me dit Resource id #5, alors que celui que je viens d'ajouter c'est le 3ème.
    C'est normal puisque la fonction pg_query() renvoie une ressource de résultat, et pas directement un résultat.

    Pour récupérer l'ID, il faudrai plutôt un code du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $result=pg_query($sql);
    if ($result) {
      list($id)=pg_fetch_row($result);
    }
    A noter aussi que la construction de la chaîne SQL dans le code ci-dessus est incorrecte car sujette à injection SQL. Il faut appliquer pg_escape_string() à chaque valeur avant de l'utiliser dans une requête.

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

Discussions similaires

  1. Recupération d'information sur les filtres
    Par Alpha31 dans le forum Access
    Réponses: 2
    Dernier message: 16/06/2006, 22h35
  2. Recupérer un évènement sur une JTable
    Par pkdev dans le forum Tables
    Réponses: 2
    Dernier message: 06/12/2005, 11h19
  3. probleme sur postgres
    Par bananaloozeur dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 10/10/2005, 13h42
  4. Recupération des selections sur une DBGrille multi Selection
    Par Andry dans le forum Bases de données
    Réponses: 1
    Dernier message: 26/11/2004, 11h43
  5. Pb d'accès à distance sur Postgre pour windows
    Par Guitch dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 28/09/2004, 19h13

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