IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

problème avec les transactions


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    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 : 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]

  2. #2
    Membre chevronné

    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 338
    Par défaut
    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

  3. #3
    Invité
    Invité(e)
    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

  4. #4
    Invité
    Invité(e)
    Par défaut
    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.

Discussions similaires

  1. Problème avec les transactions
    Par mina24 dans le forum Bases de données
    Réponses: 6
    Dernier message: 20/03/2012, 10h01
  2. problème avec Les transactions
    Par mina24 dans le forum Connexion aux bases de données
    Réponses: 1
    Dernier message: 27/02/2012, 08h55
  3. Problème avec les transactions imbriquées
    Par StringBuilder dans le forum Développement
    Réponses: 17
    Dernier message: 22/02/2012, 15h52
  4. SQL Server 2005: Problème avec les transaction logs
    Par n8ken dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 14/03/2008, 15h42
  5. probléme avec les transaction
    Par amazircool dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/12/2007, 16h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo