Bonjour,

Je suis débutant avec pgsql.
Je rencontre un problème dans l'utilisation de transactions (php/pgsql).
Voici mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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]