Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Membre éprouvé
    Homme Profil pro John
    Étudiant
    Inscrit en
    juin 2010
    Messages
    307
    Détails du profil
    Informations personnelles :
    Nom : Homme John
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2010
    Messages : 307
    Points : 452
    Points
    452

    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 :
    $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 :
    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 Expert
    Avatar de Gecko
    Homme Profil pro Antoine Pous
    Développeur Web
    Inscrit en
    février 2011
    Messages
    243
    Détails du profil
    Informations personnelles :
    Nom : Homme Antoine Pous
    Âge : 29
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : février 2011
    Messages : 243
    Points : 1 344
    Points
    1 344

    Par défaut

    Salut!

    Pour ta requête il faut faire comme ça:
    Code SQL :
    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 :
    1
    2
    $sql= "INSERT INTO personne (login, nom, prenom, email, mdp) VALUES ('$login', '$nom', '$prenom', '$email', '$mdp') RETURNING id";
    $req = pg_query ($sql);

  3. #3
    Membre éprouvé
    Homme Profil pro John
    Étudiant
    Inscrit en
    juin 2010
    Messages
    307
    Détails du profil
    Informations personnelles :
    Nom : Homme John
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2010
    Messages : 307
    Points : 452
    Points
    452

    Par défaut

    Bonjour et merci pour ta réponse.

    J'ai fais comme ceci :

    Code :
    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 :
    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 :
    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 Expert
    Avatar de Gecko
    Homme Profil pro Antoine Pous
    Développeur Web
    Inscrit en
    février 2011
    Messages
    243
    Détails du profil
    Informations personnelles :
    Nom : Homme Antoine Pous
    Âge : 29
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : février 2011
    Messages : 243
    Points : 1 344
    Points
    1 344

    Par défaut

    Que retourne ceci?
    Code php :
    1
    2
    // Ta requête
    var_dump($id);

  5. #5
    Membre éprouvé
    Homme Profil pro John
    Étudiant
    Inscrit en
    juin 2010
    Messages
    307
    Détails du profil
    Informations personnelles :
    Nom : Homme John
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2010
    Messages : 307
    Points : 452
    Points
    452

    Par défaut

    Ça me retourne ceci :

    Code :
    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 éprouvé
    Homme Profil pro John
    Étudiant
    Inscrit en
    juin 2010
    Messages
    307
    Détails du profil
    Informations personnelles :
    Nom : Homme John
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2010
    Messages : 307
    Points : 452
    Points
    452

    Par défaut

    En faisant ceci, ça marche :

    Code :
    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 818
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 818
    Points : 2 505
    Points
    2 505

    Par défaut

    Citation Envoyé par Johngtrs Voir le message

    Code :
    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 :
    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
  •