+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Membre chevronné
    Homme Profil pro
    Analyste développeur
    Inscrit en
    juin 2010
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : juin 2010
    Messages : 309
    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 chevronné

    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    décembre 2008
    Messages
    349
    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 : 349
    Points : 777
    Points
    777

    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
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : juin 2010
    Messages : 309
    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 chevronné

    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    décembre 2008
    Messages
    349
    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 : 349
    Points : 777
    Points
    777

    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
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : juin 2010
    Messages : 309
    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
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : juin 2010
    Messages : 309
    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 838
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 838
    Points : 2 788
    Points
    2 788

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •