2010-02-03 11 views
1

J'essaie de travailler avec postgresql 'nextval' en PHP. Comment puis-je remplir la parenthèse dans la troisième ligne afin de remplacer TXN_ID par la valeur de nextval ('schemadb.audit_txn_seq')?postgresql question nextval sur les séquences

$DB->query("SELECT nextval('schemadb.audit_txn_seq')"); 
$DB->query('SET CONSTRAINTS ALL DEFERRED'); 
$DB->query('SELECT schemadb.undo_transaction(TXN_ID)'); 

Merci!

Répondre

0

Essayez:

$DB->query("SELECT nextval('schemadb.audit_txn_seq')"); 
$DB->query('SET CONSTRAINTS ALL DEFERRED'); 
$DB->query("SELECT schemadb.undo_transaction(currval('schemadb.audit_txn_seq'))"); 
+0

Cela ne semble pas fonctionner. Est-il possible de stocker le résultat de "$ DB-> query (" SELECT nextval ('schemadb.audit_txn_seq') ");" dans une variable PHP? – littleK

+0

Prenons un peu de recul. Qu'est-ce que vous essayez de faire exactement? Voulez-vous juste obtenir l'ID de la prochaine valeur de la séquence? –

+0

Je veux obtenir l'ID du currval dans la séquence. Ce que vous avez posté avant ne fonctionnait pas, alors j'essaie de voir si je peux stocker le currval de la séquence dans une variable php. Merci! – littleK

1

Vous ne nous avez pas dit ce qui est variable $DB. Je suppose que vous utilisez PDO.

La question "Y at-il de toute façon de stocker le résultat de la requête dans la variable php" est une sorte de question débutant, et est facilement répondu en the manual.

Vous devez comprendre que (du point de vue de PHP) il n'y a pas de différence entre

SELECT nextval('schemadb.audit_txn_seq') 

et

SELECT xcolumn FROM xtable LIMIT 1 

Si vous voulez récupérer les valeurs de données de toute requête, vous le faites toujours la même, de manière standard:

  1. requête
  2. execute
d'extraction

espoir qui aide.

0

Je ne suis pas sûr de l'interaction avec SET CONSTRAINTS ALL Différé, mais avez-vous essayé de faire ceci:

SELECT schemadb.undo_transaction(nextval('schemadb.audit_txn_seq')) 

La question est maintenant ce ne retourne « undo_transaction »? Si elle renvoie l'ID de la transaction en cas de succès, alors vous êtes prêt à partir!