Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Problema Rollback

  1. #1

    Problema Rollback

    ciao a tutti sto cercando di usare il rollback... ma non funziona come vorrei.
    Praticamente quello che vorrei è questo:

    nel codice quando una query va in errore, mi salvo l'errore in un array.
    alla fine.. se nell'array ho degli errori faccio il rollback.. e fin qui tutto ok.
    e successivamente al rollback vorrei ciclare l'array e fare degli insert su una tabella per salvarmi gli errori.

    ecco... non mi fa gli insert di salvataggio degli errori.
    perchè fa rollback pure su quella..


    se infatti aggiungo
    $mysqli->autocommit(TRUE);
    prima della funzione logerror.... l'inserimento dell'errore viene fatto.


    codice:
    // disable autocommit 
    $mysqli->autocommit(FALSE);
    
    ............. una serie di query varie....
    
    if(count($arrayToJs) > 0)
    {
    	//se ci sono errori allora Rollback
    	$mysqli->rollback(); 
    	
    	//ciclo l'array logerror per inserire gli errori su db
    	foreach ($arraylogerror as $valueerror) {
    		foreach ($valueerror as $key => $value) {
    			//logerror($idutente, $nome, $pagina, $query)
    			switch($key)
    			{
    				case 0:
    					$idutente = $value;
    					break;
    				case 1:
    					$nome = $value;
    					break;
    				case 2:
    					$pagina = $value;
    					break;
    				case 3:
    					$error = $value;
    					break;
    			}			
    			//echo $key." => ".$value;
    		}
    		//echo "<hr>";
    		$mysqli->logerror($idutente, $nome, $pagina, $error);	
    	}
    	
    } else {
    	//altrimenti Commit  
    	$mysqli->commit();
    	
    }
    Ringrazio in anticipo per l'aiuto

  2. #2

    Re: Problema Rollback

    ok sembra che inserendo
    $mysqli->autocommit(TRUE);
    prima della funzione logerror....
    funzioni correttamente..

  3. #3
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    dopo logerror dovresti comunque eseguire il commit: sei dentro una transazione

  4. #4
    Originariamente inviato da .Kurt
    dopo logerror dovresti comunque eseguire il commit: sei dentro una transazione
    impostando l'autocommit a true prima del logerror, il commit credo venga eseguito da solo, non serve forzarlo, o sbaglio?

  5. #5
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    no, non sbagli.
    il problema però potrebbe presentarsi dopo questo blocco di codice.
    in caso di nessun errore, ti ritrovi ancora con autocommit a false, in caso di errore lo trovi a true.

    se autocommit lo imposti a false, dovresti:
    - iniziare la transazione [con mysqli dovrebbe essere implicito, il che non mi piace molto]
    - eseguire le tue query
    - rollback/commit
    dopodichè potresti anche ri-settare l'autocommit a true.

    Codice PHP:
            }
            
    //echo "<hr>";
            
    $mysqli->logerror($idutente$nome$pagina$error);    
            
    $mysqli->commit();
        }
        
    } else {
        
    //altrimenti Commit  
        
    $mysqli->commit();
        
    }
    // non mi servono più le transizioni, allora...
    $mysqli->autocommit(TRUE); 

  6. #6
    ok capito, grazie per la spiegazione
    la mia pagina però finisce dopo il logerror, quindi non dovrei aver problemi.

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.