Vous n'êtes pas identifié(e).
Pages : 1
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
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")
Dans une session psql, j'obtiens
"ERREUR : la colonne "id_doc" n'existe pas".
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é ?
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"; }
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
Pages : 1