PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Re : PHP » Récupérer l'ID dernier enregistrement » 08/06/2011 14:47:03

En effet,

dans ma table la colonne s'appelait "Id_doc", et pour l'exemple je l'avais remplacé par "id_doc"... sans penser que ça pouvait avoir une influence, puisque je faisais attention à bien mettre la majuscule partout dans mon script ! Encore une erreur bête de débutante...

Bon, du coup j'ai enlevé toutes les majuscules de mes noms de champs, et maintenant le RETURNING + pg_fetch_row ça marche !

Merci beaucoup,


amélie

#2 Re : PHP » Récupérer l'ID dernier enregistrement » 08/06/2011 14:14:43

Oui oui, \d doc me liste bien toutes les colonnes :

                                        Table « public.doc »
   Colonne    |          Type                     |                          Modificateurs                           
--------------+-----------------------------+------------------------------------------------------------------
Id_doc       | integer                           | non NULL Par défaut, nextval('"documents_Id_doc_seq"'::regclass)
auteur        | text                                | non NULL
titre_doc    | character varying(200) | non NULL

Index :
    "documents_pkey" PRIMARY KEY, btree ("Id_doc")

#3 Re : PHP » Récupérer l'ID dernier enregistrement » 08/06/2011 12:14:44

Dans une session psql, j'obtiens
"ERREUR : la colonne "id_doc" n'existe pas".

#4 Re : PHP » Récupérer l'ID dernier enregistrement » 08/06/2011 11:50:57

J'ai essayé le pg_fetch_row après le returning.
Mais...

$sql = pg_query("INSERT INTO doc (titre_doc, auteur) VALUES ($titre, $auteur) RETURNING titre_doc");
if (!sql) { echo "erreur"; }
$lire = pg_fetch_row($sql);
echo "Titre = $lire[0]";

Ca affiche bien le titre du doc enregistré, par contre

$sql = pg_query("INSERT INTO doc (titre_doc, auteur) VALUES ($titre, $auteur) RETURNING id_doc");
if (!sql) { echo "erreur"; }
$lire = pg_fetch_row($sql);
echo "Id = $lire[0]";

Ca m'affiche "erreur".

Y a-t-il une méthode pour avoir un message d'erreur détaillé ?

#5 Re : PHP » Récupérer l'ID dernier enregistrement » 08/06/2011 11:40:13

Le nom de la colonne c'est titre_doc, j'ai voulu simplifier pour l'exemple...
Et quand je dis que la requête échoue, c'est en vérifiant avec
if (!$sql) { echo "erreur"; }

#6 PHP » Récupérer l'ID dernier enregistrement » 08/06/2011 11:11:38

Amelie_D
Réponses : 10

Bonjour,

voilà mon petit souci...

J'ai une table "doc" (id_doc, titre, auteur), clé primaire id_doc de type serial,
et une table "moclé" (id_doc, moclé), clé primaire id_doc (integer) + moclé.

Pour remplir la table moclé, j'ai besoin de récupérer l'id_doc du dernier objet enregistré.
J'ai essayé les 3 méthodes que j'ai trouvé sur le net :

$sql = pg_query("INSERT INTO doc (titre_doc, auteur) VALUES ('$titre', '$auteur') RETURNING id_doc");
$insert = pg_query("INSERT INTO moclé (id_doc, moclé) VALUES ($sql, $moclé)");

> La requête $sql échoue.

pg_query("INSERT INTO moclé (id_doc, moclé) VALUES (currval(doc_id_doc_seq), $moclé)");

> Pareil, la requête échoue.

$sql = pg_query("SELECT * FROM doc ORDER BY 'id_doc' DESC 1");
$insert = pg_query("INSERT INTO moclé (id_doc, moclé) VALUES (", $sql['id_doc'], "$moclé)");

> Rien ne se passe, la requête est acceptée mais ne renvoie rien.
Si je trie par titre, par contre (ORDER BY 'titre_doc'), ça marche, et je peux récupérer l'ID du document correspondant.
Sauf que le dernier titre ne correspond pas forcément au dernier enregistrement...

Je précise que j'ai essayé en restant connectée à la BD, et en déconnectant et reconnectant entre les 2 étapes (sauf pour le RETURNING).

Est-ce que quelqu'un aurait une correction ou une autre requête à proposer ?

amélie

Pied de page des forums

Propulsé par FluxBB