Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    44

    rollback sembra non funzionare

    Salve a tutti;
    ho implementato una funzione pdo che dovrebbe fare un semplice rollback nel caso una delle query non vada a buon fine, se però provo a simulare un errore su una query (provo a farlo scrivere su una tabella che non esiste), ecco che il database non viene portato allo stato precedente.
    La funzione di rollback che ho scritto:

    codice:
     try {
            global $db;
            $db->beginTransaction();
    
    
            $exec1 = $db->exec("INSERT INTO `tabella_esistente` (id_utente) VALUES (2)");
            $exec2 = $db->exec("INSERT INTO `tabella_non_esistente` (id_utente) VALUES (2)");
           
            $db->commit();       
           
        } catch (PDOException $ex) {      
            $db->rollBack();       
        }
    La prima query viene fatta, la seconda ovviamente no. Io invece mi aspetto che generandosi un errore nella seconda, il db venga ripristinato allo stato precedente alla prima query.

    Grazie anticipatamente

  2. #2
    Ciao,

    scrivi cosi :

    codice:
      
    $db = new PDO($dsn,$user,$password); $db->beginTransaction();
     try {
    
            $db->exec("INSERT INTO `tabella_esistente` (id_utente) VALUES (2)");
            $db->exec("INSERT INTO `tabella_non_esistente` (id_utente) VALUES (2)");
           
            $db->commit();       
           
        } catch (Exception $ex) {      
            $db->rollBack();       
        }
    $db = new PDO($dsn,$user,$password); qui passi i tuoi dati di connessione al DB
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    44
    Ciao,
    non c'entra la definizione della variabile $db.
    $db è la variabile che definisco nella inizializzazione della connessione a db e quando la uso devo inizializzare come globale.
    Il problema è piuttosto che nel catch non ci entra nemmeno.
    sembra come che il catch voglia errore di una certa gravità invece io vorrei fare rollback anche se per un motivo stupido non si riuscisse a scrivere su db tipo se sbaglio il nome di una tabella

  4. #4
    non é l'unica modifica che ho apportato,

    ripeto, prova cosi (non mettendo a questo punto l'inizializzazione e lasciandola come hai fatto)

    codice:
    $db->beginTransaction();
     try {
    
            $db->exec("INSERT INTO `tabella_esistente` (id_utente) VALUES (2)");
            $db->exec("INSERT INTO `tabella_non_esistente` (id_utente) VALUES (2)");
           
            $db->commit();       
           
        } catch (Exception $ex) {      
            $db->rollBack();       
        }
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.