Próbuję skonfigurować swoją pierwszą transakcję w MySQL za pomocą PHP/PDO ...PHP PDO MySQL struktura Kod transakcji
mam tylko krótkie pytanie, co jest najlepszym sposobem, aby ustalić, czy poprzednie zapytanie było udane czy nie? Oto, co mam teraz, ale wolałbym znaleźć sposób na przetestowanie zapytania za pomocą instrukcji if.
To jest prawie makiety kod, aby spróbować uzyskać działający model .. Wiem, że wyniki $ nie jest skuteczne testowanie, jeśli coś było dobre lub złe .. mam go tam bardziej jako miejsce na prawdziwą ofertę kiedy przyjdzie czas ..
if ($_POST['groupID'] && is_numeric($_POST['groupID'])) {
$sql = "SET AUTOCOMMIT=0";
$dbs = $dbo->prepare($sql);
$dbs->execute();
$sql = "START TRANSACTION";
$dbs = $dbo->prepare($sql);
$dbs->execute();
$sql = "DELETE FROM users_priveleges WHERE GroupID=:groupID";
$dbs = $dbo->prepare($sql);
$dbs->bindParam(":groupID", $_POST['groupID'], PDO::PARAM_INT);
$dbs->execute();
try {
$sql = "DELETE FROM groups WHERE GroupID=:groupID LIMIT 1";
$dbs = $dbo->prepare($sql);
$dbs->bindParam(":groupID", $_POST['groupID'], PDO::PARAM_INT);
$dbs->execute();
$results["error"] = null;
$results["success"] = true;
try {
$sql = "DELETE FROM users WHERE Group=:groupID";
$dbs = $dbo->prepare($sql);
$dbs->bindParam(":groupID", $_POST['groupID'], PDO::PARAM_INT);
$dbs->execute();
$results["error"] = null;
$results["success"] = true;
$sql = "COMMIT";
$dbs = $dbo->prepare($sql);
$dbs->execute();
}
catch (PDOException $e) {
$sql = "ROLLBACK";
$dbs = $dbo->prepare($sql);
$dbs->execute();
$results["error"] = "Could not delete associated users! $e";
$results["success"] = false;
}
}
catch (PDOException $e)
{
$sql = "ROLLBACK";
$dbs = $dbo->prepare($sql);
$dbs->execute();
$results["error"] = "COULD NOT REMOVE GROUP! $e";
$results["success"] = false;
}
}
Dlaczego nie skorzystać z PDO beginTransaction(), commit() i rollback() metody? – GordonM
LOL Właśnie dowiedziałem się dziś rano o metodzie beginTransaction ... Pomyślałem, że tamci dwaj pozostali, ale jeszcze ich nie odkryli. To jest na liście TODO tho dzięki! – guyfromfl
Ponadto, nie musisz przygotowywać() każdego polecenia, w rzeczywistości jest to raczej marnotrawstwo dla tych, do których nie wstawisz żadnych zmiennych. Po prostu uruchom te z query(). Zapisuje zarówno linie kodu, jak i niepotrzebne przygotowania. – GordonM