Ho una domanda sul test delle query in una transazione. Sto usando le transazioni MySQL per un bel po 'di tempo, e ogni volta che lo faccio, io uso qualcosa di simile:Come testare le transazioni MySQL?
$doCommit = true;
$error = "";
mysql_query("BEGIN");
/* repeat this part with the different queries in the transaction
this often involves updating of and inserting in multiple tables */
$query = "SELECT, UPDATE, INSERT, etc";
$result = mysql_query($query);
if(!$result){
$error .= mysql_error() . " in " . $query . "<BR>";
$doCommit = false;
}
/* end of repeating part */
if($doCommit){
mysql_query("COMMIT");
} else {
echo $error;
mysql_query("ROLLBACK");
}
Ora, accade spesso che voglio provare la mia transazione, così ho cambiare mysql_query("COMMIT");
-mysql_query("ROLLBACK");
, ma posso immaginare che questo non è un ottimo modo per testare questo tipo di cose. Di solito non è davvero fattibile copiare ogni tabella in un temp_table e aggiornarla e inserirla in quelle tabelle ed eliminarle successivamente (ad esempio perché le tabelle possono essere molto grandi). Ovviamente, quando il codice entra in produzione, viene gestita la relativa gestione degli errori (anziché solo la stampa dell'errore).
Qual è il modo migliore per fare cose del genere?
Oh caro ... Ho appena scoperto che PHP non supporta elementi come 'finally' o' ensure'. –
Sì, lo so ... PHP fa schifo e io lo uso ... –
Ora è disponibile il supporto per 'finally', da PHP 5.5 – Alex