Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/07/2005, 19h13   #1
Candidat au titre de Membre du Club
 
Inscription : août 2004
Messages : 33
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 33
Points : 14
Points : 14
Par défaut [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]
ipso est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2005, 23h46   #2
Membre éclairé
 
Inscription : janvier 2005
Messages : 336
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2005
Messages : 336
Points : 353
Points : 353
le message d'erreur dit que la transaction a été annulée, donc tu ne peux pas recupérer la valeur de ta séquence, puisque celle ci appartient à la transaction.

KrysKool
kryskool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2005, 10h50   #3
Candidat au titre de Membre du Club
 
Inscription : août 2004
Messages : 33
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 33
Points : 14
Points : 14
Par défaut 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
ipso est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2005, 11h43   #4
Candidat au titre de Membre du Club
 
Inscription : août 2004
Messages : 33
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 33
Points : 14
Points : 14
question bête, réponse bête : ma requete $sql était fausse (j'avais oublié de remplacer les valeurs vides par NULL).

désolé pour le dérangement.
ipso est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h33.


 
 
 
 
Partenaires

Hébergement Web