Précédent   Forum du club des développeurs et IT Pro > PHP > PHP & SGBD > PHP & PostgreSQL
PHP & PostgreSQL Forum d'entraide sur PostgreSQL avec PHP. Avant de poster -> FAQ PostgreSQL, Cours PostgreSQL. Pour les questions concernant le moteur PostgreSQL plutôt que les fonctions PHP, merci d'utiliser le forum PostgreSQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 26/05/2012, 01h29   #1
Johngtrs
Membre éprouvé
 
Homme John
Étudiant
Inscription : juin 2010
Messages : 266
Détails du profil
Informations personnelles :
Nom : Homme John
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2010
Messages : 266
Points : 476
Points : 476
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.
Johngtrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2012, 08h35   #2
Gecko
Membre émérite
 
Avatar de Gecko
 
Homme Antoine Pous
Développeur Web
Inscription : février 2011
Messages : 125
Détails du profil
Informations personnelles :
Nom : Homme Antoine Pous
Âge : 28
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 : 125
Points : 830
Points : 830
Envoyer un message via MSN à Gecko Envoyer un message via Skype™ à Gecko
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);
__________________
Code php :
if ($toBe || $notToBe) echo 'That is the question';
Gecko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2012, 14h44   #3
Johngtrs
Membre éprouvé
 
Homme John
Étudiant
Inscription : juin 2010
Messages : 266
Détails du profil
Informations personnelles :
Nom : Homme John
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2010
Messages : 266
Points : 476
Points : 476
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 ?
Johngtrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2012, 15h54   #4
Gecko
Membre émérite
 
Avatar de Gecko
 
Homme Antoine Pous
Développeur Web
Inscription : février 2011
Messages : 125
Détails du profil
Informations personnelles :
Nom : Homme Antoine Pous
Âge : 28
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 : 125
Points : 830
Points : 830
Envoyer un message via MSN à Gecko Envoyer un message via Skype™ à Gecko
Que retourne ceci?
Code php :
1
2
// Ta requête
var_dump($id);
__________________
Code php :
if ($toBe || $notToBe) echo 'That is the question';
Gecko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2012, 16h13   #5
Johngtrs
Membre éprouvé
 
Homme John
Étudiant
Inscription : juin 2010
Messages : 266
Détails du profil
Informations personnelles :
Nom : Homme John
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2010
Messages : 266
Points : 476
Points : 476
Ç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
Johngtrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2012, 18h46   #6
Johngtrs
Membre éprouvé
 
Homme John
Étudiant
Inscription : juin 2010
Messages : 266
Détails du profil
Informations personnelles :
Nom : Homme John
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2010
Messages : 266
Points : 476
Points : 476
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" );
Johngtrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2012, 18h54   #7
estofilo
Modérateur
 
Inscription : octobre 2008
Messages : 1 702
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 702
Points : 2 347
Points : 2 347
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.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 11h30.


 
 
 
 
Partenaires

Hébergement Web