2015-08-12 2 views
2

Je dois être capable d'identifier la ligne que je viens d'insérer après avoir utilisé pg_insert, mais le doc dit simplement qu'il renvoie true/false. Comment puis-je déterminer la clé p de l'enregistrement à partir d'un pg_insert()? Je sais que je pourrais utiliser une requête construite manuellement avec un "RETOUR" à la fin, mais je ne veux pas utiliser la fonction pg_query() parce que pg_insert échappe automatiquement tout pour vous donc je veux l'utiliser à la place.Comment peut-on déterminer la clé p d'une ligne insérée après avoir utilisé pg_insert()?

+0

Vous pouvez utiliser [pg_query_params] (http://php.net/manual/en/function.pg-query-params.php) avec une clause 'RETURNING' et utiliser des paramètres pour tout échapper. – greg

+0

@greg génial. Veuillez l'ajouter comme réponse, je peux donc le sélectionner. – adjenks

Répondre

1

Vous pouvez utiliser pg_query_params avec une clause RETURNING et utiliser des paramètres pour tout échapper.

Le seul problème de cette fonction est que lorsqu'une erreur se produit, vous ne pouvez pas connaître la cause réelle du problème. Obtenir un message d'erreur correct signifie utiliser pg_send_query_params avec pg_get_result.

Voir code example.

0

Puisqu'il n'y a pas de concept d'identifiant dans pgsql (seulement des séquences), vous pouvez utiliser le code suivant.

SELECT currval(pg_get_serial_sequence(tablename, 'id')); 
+0

Cela peut ne pas fonctionner car les séquences sont insensibles aux transactions. Une autre insertion peut se produire entre votre insertion et le moment où vous récupérez le last_id. – greg