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 :

Recupérer du dernier sur postgres [PostgreSQL]


Sujet :

PHP & Base de données

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

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Points : 626
    Points
    626
    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 éprouvé
    Avatar de Gecko
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Décembre 2008
    Messages
    499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Décembre 2008
    Messages : 499
    Points : 1 277
    Points
    1 277
    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 confirmé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Points : 626
    Points
    626
    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 éprouvé
    Avatar de Gecko
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Décembre 2008
    Messages
    499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Décembre 2008
    Messages : 499
    Points : 1 277
    Points
    1 277
    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 confirmé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Points : 626
    Points
    626
    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 confirmé
    Homme Profil pro
    Analyste développeur
    Inscrit en
    Juin 2010
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste développeur

    Informations forums :
    Inscription : Juin 2010
    Messages : 317
    Points : 626
    Points
    626
    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
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    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 Composants
    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