In mysql ci sono vari tipi di tabelle, quelle di default sono le myisam e non supportano le transazioni, chiavi esterne e company, quindi quando crei le tabelle devi utilizzare la seguente sintassi sql:
codice:
CREATE TABLE esempio(
...definizione dei campi
)TYPE=INNODB
In questa maniera verrà creata una tabella di tipo innodb che sono piu' pesanti delle myisam ma hanno delle funzionalita' in piu'.
per il codice ti faccio un'esempio:
codice:
<?PHP
$commit = true; //variabile che mi indica se committare o meno
$connessione = mysql_connect ("localhost", "root", "") or die ("Il database non può essere connesso ");
mysql_select_db("luketto", $connessione) or die ("Il database non può essere selezionato ");
mysql_query("SET AUTOCOMMIT = 0") or die("L autocommit non può essere impostato " . mysql_error());
mysql_query("START TRANSACTION");
$query = "INSERT INTO utenti (username) VALUES ('AAA')";
$risultato[0] = mysql_query($query, $connessione);
$query = "INSERT INTO utenti (username) VALUES ('BBB')";
$risultato[1] = mysql_query($query, $connessione);
$query = "INSERT INTO utenti (username) VALUES ('CCC')";
$risultato[2] = mysql_query($query, $connessione);
for($i = 0; $i < sizeof($risultato); $i++){
if(!$risultato[$i]){
$commit = false;
}
}
if($commit){
mysql_query("COMMIT");
}else{
mysql_query("ROLLBACK");
}
?>
Con questo codice (l'ho scritto in fretta, ci saranno sicuramente soluzioni migliori) se tutte le query vanno a buon fine viene committato il tutto, altrimenti viene eseguito il ROLLBACK.
Ribadisco il concetto che le tabelle devono essere di tipo innodb