Написание запроса DELETE для 3 таблиц

Я пытаюсь написать простой запрос, который удалит событие на основе его event_id. Однако этот event_id может находиться в 1 из 3 таблиц в базе данных.

Лиги Турниры Тренинги

Каждый event_id генерируется функцией рандомизатора, поэтому каждый идентификатор уникален.

Я пробовал несколько разных синтаксисов для SQL, но ни один из них не удалит событие из таблицы БД. Какие-либо предложения?

Вот что у меня есть:

if (isset($_POST['delete'])){
   
    $query = "delete from leagues where event_id= '$event_id', delete from tournaments where event_id= '$event_id', delete from trainings where event_id= '$event_id'"; 
    $result = mysqli_query($conn, $query);
    
    header('location: index_admin.php');
    
    
} else {
   
}

Я также пробовал использовать команду union, используя несколько запросов на удаление, ставя точку с запятой после каждой команды удаления. Что еще я могу попробовать?

Просто сделайте три отдельных оператора удаления, которые вы запускаете один за другим.

Thorsten Kettner 13.02.2023 07:35

Синтаксис вашего запроса неверен: вы не можете просто объединить три запроса, разделенных запятыми, но, более того, вы, похоже, не инициализировали $event_id, поэтому ваш запрос не будет включать идентификатор для удаления.

Tangentially Perpendicular 13.02.2023 07:44

@ThorstenKettner вы имеете в виду так: $query = "удалить из лиг, где event_id='$event_id' удалить из турниров, где event_id='$event_id' удалить из тренировок, где event_id='$event_id'";?

A.Rasor 13.02.2023 08:07

@TangentiallyPerpendicular Извините, я не захватил всю страницу, у меня есть $event_id, инициализированный выше. Запрос работает, когда я ориентируюсь только на 1 таблицу БД, мне просто нужно иметь возможность ориентироваться на все 3 в одном запросе.

A.Rasor 13.02.2023 08:10

Я имею в виду это: $query = "delete from leagues where event_id ='$event_id'". Тогда: $query = "delete from tournaments where event_id ='$event_id'". Напоследок: $query = "delete from trainings where event_id ='$event_id'".

Thorsten Kettner 13.02.2023 08:13
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
5
98
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
if (isset($_POST['delete'])){
    $stmt = $pdo->prepare('delete from leagues where event_id = :event_id');
    $stmt->execute([ ':event_id' => $event_id]);
    $res = $stmt->fetch();
    header('location: index_admin.php');
}else{
   
}

Это опасно, подвержено SQL-инъекциям: php.net/manual/en/security.database.sql-injection.php

Cully 13.02.2023 08:26

Это сработало для меня. Спасибо всем за помощь!

A.Rasor 13.02.2023 08:33

Нет причин выполнять 3 отдельных DELETE.

DELETE leagues, tournaments, trainings
FROM (SELECT $event_id AS event_id) src -- use parameter instead of immediate insert
LEFT JOIN leagues USING (event_id)
LEFT JOIN tournaments USING (event_id)
LEFT JOIN trainings USING (event_id)

Конечно, вы не будете вставлять значение в запрос, как указано выше, — вы будете использовать подготовленный оператор.

Другие вопросы по теме