Mam pytanie dotyczące testowania zapytań w transakcji. Używam transakcji MySQL od dłuższego czasu, i za każdym razem robię to, używam coś takiego:Jak przetestować transakcje 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");
}
Teraz, często zdarza się, że chcemy przetestować moją transakcję, więc mogę zmienić mysql_query("COMMIT");
do mysql_query("ROLLBACK");
, ale mogę sobie wyobrazić, że nie jest to bardzo dobry sposób testowania tego rodzaju rzeczy. Zwykle nie jest możliwe kopiowanie każdej tabeli do temp_table i aktualizowanie i wstawianie do tych tabel i usuwanie ich później (na przykład, ponieważ tabele mogą być bardzo duże). Oczywiście, kiedy kod zostanie wprowadzony do produkcji, zostanie wprowadzona odpowiednia obsługa błędów (zamiast samego drukowania błędu).
Jaki jest najlepszy sposób robienia takich rzeczy?
Och kochanie ... Właśnie się dowiedziałem, że PHP nie obsługuje niczego takiego jak 'finally' lub' ensure'. –
Tak, wiem ... PHP jest do bani i ja go używam ... –
Istnieje teraz wsparcie dla 'finally', od PHP 5.5 – Alex