Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [PHP] autocommit e rollback

    Ciao a tutti.
    Non riesco a trovare una risposta esauriente a questo mio dubbio.

    In php, una volta che setto l'autocommit a false, che differenza c'è tra eseguire un rollback oppure non eseguire il commit?

    Ad esempio ammettiamo che se si verifica un errore io devo evitare che le modifiche vengano scritte sul db.

    Che differenza c'è tra questi due codici:

    codice:
    $mysqli->autocommit(FALSE);
    $mysqli->query("INSERT INTO Language VALUES ('DEU', 'Bavarian', 'F', 11.2)");
    if($mysqli->error=='')
        {
            //altre operazioni varie
            $mysqli->commit();
        }
    else
        {
              header('location:error.php')
        }
    codice:
    $mysqli->autocommit(FALSE);
    $mysqli->query("INSERT INTO Language VALUES ('DEU', 'Bavarian', 'F', 11.2)");
    if($mysqli->error=='')
        {
            //altre operazioni varie
            $mysqli->commit();
        }
    else
        {
             $mysqli->rollback(); 
             header('location:error.php')
        }
    A mio giudizio nessuna.
    Se con l'autocommit a false il commit avviene solo quando lo invoco, non serve che faccio il rollback nel caso in cui non voglio che avvengano le modifiche. Mi basta non invocare il commit no? :master:

  2. #2
    Utente di HTML.it L'avatar di bum
    Registrato dal
    Jun 2008
    Messaggi
    234
    A mio giudizio nessuna. Se con l'autocommit a false il commit avviene solo quando lo invoco, non serve che faccio il rollback nel caso in cui non voglio che avvengano le modifiche

    Si se l'autocommit è false non hai bisogno di fare rollback in quanto non hai nulla di cui fare il rollback in quanto la quary viene eseguita al commit.

    Poi la scelta tra autocommit a True e False mi sà piu di una scelta di stile/chiarezza: c'è chi preferisce avere del codice "più chiaro" usando l'autocommit a true e usando commit e rollback e chi preferisce uno stile più sintiteco.

    Ovviamente a meno di non scrivere applicazioni particolari.

  3. #3
    In teoria il tuo discorso nn fa una grinza. Il punto però è che come stile di programmazione non va assolutamente bene perché ti porta ad usare delle "MALSANE ABITUDINI".

    Innanzitutto tu puoi agire così perché in caso di errore tu fai:

    header('location:error.php')


    cioè interrompi la pagina corrente e ne carichi un'altra.
    Ma se tu continuassi a stare nella stessa pagina e poi supponiamo che fai altre query allora potresti avere dei problemi soprattutto, appunto, se usi questa "malsana abitudine".
    In caso invece di buona abitudine non avresti nessun problema.

    C'è ancora un altro discorso, cioè, è + comodo quando una transazione riguardo + query metterle in un try catch, così appena si verifica un errore, nel catch esegui il rollback delle operazioni!

  4. #4
    Poi la scelta tra autocommit a True e False mi sà piu di una scelta di stile/chiarezza: c'è chi preferisce avere del codice "più chiaro" usando l'autocommit a true e usando commit e rollback e chi preferisce uno stile più sintiteco.
    Non scherziamo, l'autocommit a false non è solo uno stile anzi.
    E' l'unico modo per poter annuallare delle modifiche sul db quando uno dei tuoi insert (ad) esempio va in eccezione.
    Con l'autocommit a true non potresti.

  5. #5
    Utente di HTML.it L'avatar di bum
    Registrato dal
    Jun 2008
    Messaggi
    234
    infatti ho aggiunto

    Ovviamente a meno di non scrivere applicazioni particolari.

  6. #6
    Ok, scusa...
    ...è che non pensavo fosse una cosa "particolare" quella di avere più di una insert in una jsp.

    Comunque grazie per l'aiuto.
    Ad ogni modo io userò comunque il rollbak.
    La domanda l'ho fatta solo per avere un confronto con voi e capire se mi era sfuggito qualcosa.

    Grazie ancora!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.