Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25

Discussione: [PHP] transazioni

  1. #1

    [PHP] transazioni

    Salve,
    devo creare alcune transazioni in PHP, sapreste dirmi come fare?

    esempio:

    <connessione al db>

    eseguo query 1

    eseguo query 2

    eseguo query 3

    se una delle query va in errore faccio il roolback e quindi sul db non viene scritto nulla, altrimenti le query vengono confermate in blocco ed il db viene aggiornato!

    Io ho fatto una cosa del genere in java mettendo in try tutte le query con la conferma finale, in catch il roolback!

    Come posso fare con il php?

    Grazie

  2. #2
    e' un idea...non so se possa funzionare...

    potresti fare un if che controlli l' avvenuta esecuzione delle query

    seguito da un else che fa il roolback nel caso in cui 1 di queste query non andasse a buon fine...

    ti ripeto... e' solo un idea...

    provaci...ma non ti assicuro niente...

  3. #3

    ma...

    ma come faccio il roolback delle query? e come assoco tutte le query alla transazione, mi sa che non mi sono spiegato bene forse...!!!

  4. #4
    Utente di HTML.it L'avatar di iox84
    Registrato dal
    May 2004
    Messaggi
    754
    Ciao!

    Che database stai utilizzando?

    Potresti essere un po' piu' preciso sui tuoi strumenti che hai a disposizione?
    La fortuna e' cieca ma la sfiga ci vede benissimo
    Comprarselo o farselo di legno

  5. #5

    si scusami

    scusami, PHP e MySQL

  6. #6
    Utente di HTML.it L'avatar di iox84
    Registrato dal
    May 2004
    Messaggi
    754
    Intanto devi per forza utilizzare delle tabelle che supportano le transazioni (accertati che la tua versione di mysql le supporti), io ti consiglio le INNODB
    poi puoi usare questa classe (l'ho fatta io in PHP 4 e potrebbero esserci alcune cavolate)

    codice:
    class dbTransaction{
    	var $status;
    	var $snapshot;
    	/*il costrutture di questa classe disabilita automaticamente l'autocommit del DB 
    	* per riabilitarlo chiamare il metodo setAtoCommit() con parametro impostato a 1*/
    	function dbTransaction(){
    		$this->status = "EXECUTE";
    		$this->snapshot = false;
    		$this->setAutoCommit(0);
    	}
    	function beginTransaction($snapshot = 0){
    		if($snapshot == 1){
    			$snap = " WITH CONSISTENT SNAPSHOT";
    			$this->snapshot = true;
    		}else{
    			$snap = "";
    			$this->snapshot = true;
    		}
    		$start = "START TRANSACTION".$snap;
    		mysql_query($start);
    	}
    	function commit(){
    		mysql_query("COMMIT");
    		$this->status = "COMMIT";
    	}
    	function rollback(){
    		mysql_query("ROLLBACK");
    		$this->status = "ROLLBACK";
    	}
    	function setAutoCommit($value = 1){		//default disabled
    		if(is_numeric($value)){
    			if($value == 0 || $value == 1){
    				($value == 0)?($this->commitStat = "MANUAL"): ($this->commitStat = "AUTO");
    				$autoCommit = "SET AUTOCOMMIT = ".$value.";";
    				mysql_query($autoCommit) or die(mysql_error());
    			}else{
    				echo "Il valore inserito non e' corretto";
    				exit();
    			}
    		}else{
    			echo "Il valore inserito non e' corretto";
    			exit();
    		}
    	}//END setAutoCommit
    }
    Per documentarti puoi andare qui:

    http://dev.mysql.com/doc/mysql/en/commit.html

    Per ulteriori dubbi e perplessita' posta pure
    La fortuna e' cieca ma la sfiga ci vede benissimo
    Comprarselo o farselo di legno

  7. #7

    grazie

    Prima di tutto volevo ringraziarti per avermi postato la classe, ma vorrei approfittare delle tue competenze e della tua disponibilità per chiederti un'ulteriore cosa:

    io conosco abbastanza bene Java, quindi in generale i linguaggi di programmazione orientati agli oggetti, mentre ho programmato con il php sempre con una programmazione procedurale! Mi spieghi come programmare con php ad oggetti perchè non ne ho proprio idea!

    e poi come posso utilizzare quella classe che mi hai postato?

    Grazie mille ancora
    Luketto

  8. #8
    Utente di HTML.it L'avatar di iox84
    Registrato dal
    May 2004
    Messaggi
    754
    per la guida on-line guarda qui, se hai affinita' con il java non dovresti trovare difficolta'

    http://it.php.net/language.types.object

    Preciso che la mia classe gestisce solo le transazioni e non le query e altro, per questo puoi estendere la classe o modificarla.

    per utilizzarla devi solo creare l'oggetto:

    codice:
     $transazione = new dbTransaction()
    cosi' facendo togli l'autocommit a mysql, quindi per rendere effettivi i risultati delle query devi chiamare il metodo
    codice:
     $transazione->commit();
    esempio:
    codice:
     $transazione = new dbTransaction();
     $transazione->beginTransaction();
    //esecuzione query e controllo valori di ritorno
     if($valoreControllo){
      $transazione->commit(); //committa se le query sono andate tutte a buon fine
     }else{
      $transazione->rollback();
     }
    ovviamente i controlli devi gestirli secondo le tue esigenze.
    Fammi sapere...
    La fortuna e' cieca ma la sfiga ci vede benissimo
    Comprarselo o farselo di legno

  9. #9
    usa postgres cosi hai direttamente le transazioni nel db
    Frank Contrepois
    http://contrepois.blogspot.com
    http://www.coblan.it

  10. #10

    cioè?

    Cosa è postgres scusa?

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.