Không có những điều như ON DUPLICATE DELETE hoặc sử dụng đúng NẾU ELSE với truy vấn con để làm điều đó trong một truy vấn (điều này sẽ hữu ích vì một truy vấn này sẽ thành công hoặc thất bại). Hãy suy nghĩ bạn sẽ phải cuộn qua một số truy vấn để đạt được mục tiêu của mình, như tôi đã làm. Nhưng theo dõi xem liệu các truy vấn tiếp theo có tiếp tục hay không.
Bắt đầu với giá trị trả lại ('trạng thái' trong trường hợp này) là "Không xác định" hoặc "Không đổi". Nếu điều này trả về cho bạn cuộc gọi ajax, bạn biết hộp kiểm cần quay lại trạng thái trước đó của nó trước khi nhấp và có thể bật lên một thông báo (bạn có thể mang theo cùng với json).
chạy truy vấn của bạn theo cấu trúc mã đúng/sau đó và theo dõi các truy vấn thành công và cập nhật 'trạng thái' khi chuỗi thành công tương ứng. Điều này nên làm chính xác những gì bạn cần, giữ cho nó khỏi bị lỗ đen.
(Tôi sử dụng một số giấy gói để chạy các truy vấn, mà trở về đúng/sai/null/errorinformation - cho phép bạn kiểm tra từng kết quả truy vấn)
Tôi giả sử bạn có cuộc gọi ajax của bạn tại chỗ rồi. Ví dụ mã bắt đầu khi cuộc gọi ajax của bạn bắt đầu xử lý từ phía máy chủ:
ob_end_clean();
$json = array("state" => "Unknown");
$module_id = (isset($_POST['module_id']) ? $_POST['module_id'] : null);
$group_id = (isset($_POST['group_id']) ? $_POST['group_id'] : null);
$action = (isset($_POST['action']) ? $_POST['action'] : null);
if (!empty($module_id) && !empty($group_id) && !empty($action)) {
$query = "
SELECT
1
FROM
config_module_actions_groups
WHERE
1
AND module_id = '{$module_id}'
AND group_id = '{$group_id}'
AND action = '{$action}'
";
if (getQueryAsArraySingleValues($query)) {
$query = "
DELETE FROM
config_module_actions_groups
WHERE
1
AND module_id = '{$module_id}'
AND group_id = '{$group_id}'
AND action = '{$action}'
";
if (executeQuery($query)) {
$json["state"] = "Off";
} else {
$json["message"] = "Not correctly deactivated";
}
} else {
$query = "
REPLACE INTO
config_module_actions_groups
SET
module_id = '{$module_id}',
group_id = '{$group_id}',
action = '{$action}'
";
if (executeQuery($query)) {
$json["state"] = "On";
} else {
$json["message"] = "Not correctly activated";
}
}
}
// output
echo json_encode($json);
exit;
Tôi biết máy chủ tôi đang thực hiện, nhưng chúng tôi sắp thay đổi máy chủ và không biết phiên bản nào hoặc những gì quản trị viên sys sẽ hoặc sẽ không cho phép bất cứ nơi nào chúng tôi kết thúc, vì vậy tôi đang cố gắng giữ nó càng cơ bản càng tốt trong thời gian tới. – guyfromfl
Sử dụng một chỉ mục duy nhất và sử dụng Chèn Bỏ qua, Bằng cách này nó sẽ chèn nếu không tồn tại . bạn có thể nhận được cùng một điều thực hiện theo cách này. – Adrian