[Résolu] problème avec les transactions
Bonjour,
Je suis débutant avec pgsql.
Je rencontre un problème dans l'utilisation de transactions (php/pgsql).
Voici mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
pg_query($conn,"BEGIN;");
$sql = "insert into TABLE_1 (CHAMP_1, CHAMP_2, CHAMP_3) values ('".$var_1."','".$var_2."','".$var_3."')";
pg_send_query($conn,$sql);
$res0 = pg_get_result($conn);
if (strstr(pg_result_error($res0),"value too long")) {
echo "la chaine de caractères est trop longue (255 caractères maximum)";
pg_query($conn,"ROLLBACK;");
die;
}
// on récupére le dernier id inséré dans la table TABLE_1
$sql2 = "select currval('table_1_id_seq')";
$res0 = pg_query($conn,$sql2);
$new_id = pg_fetch_result($res0, 0, 0);
// ## insertion de $new_id dans la table TABLE_2
$sql3 = "insert into TABLE_2 (CHAMP_A,CHAMP_B) values (".$var_a.",".$new_id.")";
$res0 = pg_query($conn,$sql3);
pg_query($conn,"COMMIT;"); |
Voici l'erreur que j'obtiens pour $sql2 :
Code:
Warning: pg_query(): Query failed: ERROR: current transaction is aborted, commands ignored until end of transaction block .
Est-ce parce que je cherche l'id d'un insert (dans la transaction) avant même que le commit ait eu lieu ?
Je pensais que les requêtes étaient sauvegardées en mémoire et qu'elles s'effectueraient toutes une fois le commit lancé.
Merci pour votre aide.
ipso[/b]
pourquoi la transaction s'annule ?
Bonjour,
Je n'arrive pas à comprendre pourquoi la transaction a été annulée,
le begin/commit est-il mal utilisé ?
Cela ne peut pas venir de ma condition comprenant un rollback puisque j'ai mis un die après.
Quelles sont les raisons possibles d'une annulation de transaction non volontaire ?
merci pour votre aide
ipso