Se devi eseguire una sola query, usare una transazione non ha senso, se funziona tutto ok, se c'è un problema non viene eseguita.
Le transazioni hanno senso se hai più query in sequenza.
Esempio un po' rozzo, ma rende l'idea:
hai un sito ecommerce, un utente acquista un articolo, quindi dovrai
query1 -> insert del prodotto con associato l'acquirente e vari altri dati in una tabella "ordini"
query2 -> decrementare la quantità disponibile del prodotto
...
magari qualche altra cosa, ma va bene già così
Se una delle due fallisce e non fai niente avrai un problema sul db:
- un ordine senza aver decremento di prodotto disponibile (quindi agli altri utenti risulterà che ne hai più della quantità reale)
- avrai un ordine non inserito e comunque una quantità di prodotto inferiore a quella reale mostrata agli utenti (come se l'avessi venduto).
La transazione invece ti assicura la coerenza dei dati sul db.
Il primo post di Santino83_02 ti dice come usare le transazioni:
Codice PHP:
try {
mysql_query('BEGIN');
mysql_query(...);
mysql_query(...);
//tutte le altre query che vuoi
mysql_query("COMMIT"); //se arrivi qui vuol dire che è andato tutto bene e le query saranno definitive
} catch(Exception $ex) { //se una delle query fallisce vai qui dentro
mysql_query("ROLLBACK"); //query annullate e db come era prima dell'inizio della transazione
}
Ricorda che per far funzionare le transazioni devi specificare per le tabelle un engine InnoDB, MyISAM non le supporta.