Dopo le prime prove, ecco giā le prime domande...
Premesso che per quello che serve a me sembra che il codice sia molto semplice:
START TRANSACTION;
query varie;
COMMIT o ROLLBACK in base al risultato;
Questo potrebbe essere il codice:
Codice PHP:
// inizio la transazione
mysql_query("START TRANSACTION");
// eseguo la prima query
$query = "INSERT INTO tabella (campi) VALUES (valori)";
$result = mysql_query($query);
// se non va a buon fine eseguo il rollback
if(!$result) {
mysql_query("ROLLBACK");
exit;
}
// eseguo la seconda query
$query = "INSERT INTO tabella (campi) VALUES (valori)";
$result = mysql_query($query);
// se non va a buon fine eseguo il rollback
if(!$result) {
mysql_query("ROLLBACK");
exit;
}
// se sono arrivato fin qui posso fare il commit
mysql_query("COMMIT");
Oppure potrei sfruttare il die nell'operazione di query:
Codice PHP:
$result = mysql_query($query) or die(mysql_query("ROLLBACK"));
Anche se quest'ultimo non credo funzioni in quanto il die mi restituisce solo a video il risultato. Di fatto non viene perō effettuato il commit in quanto esco.
Le domande sono:
1) Se interrompo l'esecuzione come visto nell'ultimo esempio sopra ovvero effettuo uno START TRANSACTION e poi non faccio nč ROLLBACK nč COMMIT ho visto che comunque non viene scritto nulla nel database. Ma in che stato rimane MySQL? L'operazione rimane in sospeso?
2) ho notato che comunque se ho una chiave primaria autoincrementale, anche dopo il rollback non viene riportato il valore precedente ma continua la numerazione progressivamente. C'č anche la possibilitā di fare rimanere il contatore al posto precedente?
Ciao