Tôi cố gắng để thiết lập giao dịch đầu tiên của tôi trong MySQL sử dụng PHP/PDO ...PHP PDO MySQL cấu trúc mã giao dịch
Tôi chỉ có một câu hỏi nhanh chóng, cách tốt nhất để xác định xem các truy vấn trước đó đã là gì thành công hay không? Đây là những gì tôi có ngay bây giờ, nhưng tôi thà tìm cách kiểm tra truy vấn bằng câu lệnh if.
Điều này là khá nhiều giả lập mã để cố gắng để có được một mô hình làm việc .. Tôi biết $ kết quả là không hiệu quả thử nghiệm nếu bất cứ điều gì là tốt hay xấu .. tôi có nó ở đó nhiều hơn như một nơi giữ cho thực sự đối phó khi thời gian đến ..
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;
}
}
Tại sao không sử dụng beginTransaction PDO của(), cam kết() và rollback() phương pháp? – GordonM
LOL Tôi mới học về phương pháp beginTransaction sáng nay ... Tôi đã tìm ra hai người còn lại ở đó, nhưng vẫn chưa nhìn họ. Đó là trên danh sách TODO nhờ cảm ơn! – guyfromfl
Ngoài ra, bạn không phải chuẩn bị() mọi tuyên bố, trên thực tế nó là lãng phí cho những người mà bạn sẽ không chèn bất kỳ biến nào. Chỉ cần chạy những người có truy vấn() để thay thế. Lưu trên cả hai dòng mã và chuẩn bị không cần thiết. – GordonM