Je souhaite obtenir l'ID de la ligne insérée actuelle après l'exécution de la requête d'insertion.Postgresql/php
p.s .: J'utilise la base de données postgresql.
Je souhaite obtenir l'ID de la ligne insérée actuelle après l'exécution de la requête d'insertion.Postgresql/php
p.s .: J'utilise la base de données postgresql.
Dans PG7, c'était pg_last_oid, les docs expliquent clairement comment obtenir le dernier identifiant de la nouvelle version de PG.
Si nous partons du principe que par « id » vous voulez dire une colonne qui est la clé primaire et est également déclarée série, alors vous devez ajouter un RETURNING à l'instruction INSERT:
INSERT INTO <table> (...) VALUES (...) RETURNING id;
Et en PHP, vous pouvez traiter cette instruction comme une requête normale qui renvoie une ligne.
lorsque cette requête est exécutée "INSERT INTO contacts (titre, nom, titre du travail, téléphone, email) VALEURS ('tes', 'test s/w', '0102365478', '[email protected]', '123') RETURNING id; " il en résulte l'erreur: Échec de la requête: ERREUR: erreur de syntaxe à ou près de "RETOUR" –
Ce qui signifie probablement que vous utilisez une ancienne version (<8.2) de Postgres qui ne prend pas en charge RETURNING. Si possible, mise à niveau. –
y a-t-il des solutions? J'ai essayé la méthode currval() mais cette erreur est apparue: "Requête échouée: ERROR: currval de la séquence" contacts_id_seq "n'est pas encore définie dans cette session" –
De la documentation Postgres
Insert a single row into table distributors, returning the sequence number generated by the DEFAULT clause:
INSERT INTO distributors (did, dname) VALUES (DEFAULT, 'XYZ Widgets') RETURNING did;
http://www.postgresql.org/docs/8.3/interactive/sql-insert.html
lorsque cette requête est exécutée « INSERT INTO contacts (titre, nom, job_title, téléphone, e-mail) VALUES ('tes', 'test s/w ',' 0102365478 ',' [email protected] ',' 123 ') RETURNING id; " il résulte de l'erreur: Requête échouée: ERREUR: erreur de syntaxe à ou près de "RETOUR" –
Je pense que cela devrait être un commentaire aux réponses de Garrow ou Milen A. Radev – RaYell
désolé c'est un conflit. –