Как вернуться в запросе INSERT-SELECT, которое существовало в условном выражении WHERE

вы видите, у меня такой запрос:

 $sql = "INSERT INTO visitor( visitor_username, email, PASSWORD ) 
       SELECT * FROM ( SELECT '$username', '$email','$password') 
       AS tmp WHERE NOT EXISTS 
      (SELECT admin.admin_username, admin.email FROM admin AS admin 
      WHERE admin.admin_username = '$username' OR admin.email = '$email' 
      UNION SELECT staff.staff_username, staff.email FROM staff 
      AS staff WHERE staff.staff_username = '$username' OR 
      staff.email = '$email' ) LIMIT 1";

в основном, если значения (visitor_username, email) не существуют в таблице администратора / персонала, мы вставляем значения, это работает довольно хорошо и быстро, но хорошее решение не всегда приносит радугу.

если мы не смогли вставить какие-либо значения в таблицу, я возвращаю это сообщение об ошибке

echo "User already exists. Please choose a different email address or username.";

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

Должен ли я разделить запрос (один выбор, затем вставить) или есть другой способ, которым я не нахожу в Интернете, чтобы сделать это в том же запросе?

Моя цель - вернуть конкретное сообщение об ошибке с помощью этого запроса, например:

«Ошибка: имя пользователя уже существует» или «Ошибка: адрес электронной почты уже существует».

Спасибо за проверку и попытку помочь мне заранее !.

Я бы создал два запроса или одну функцию MySQL, которая вернет какой-то ответ.

Aleksandar Rakić 29.11.2018 13:24

Пожалуйста, покажите более полный блок кода PHP (не фрагменты строки), поскольку это сообщение об ошибке, заданное пользователем. Нам нужно увидеть условную логику.

Parfait 02.12.2018 21:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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 и хотите разрабатывать...
0
2
49
1

Ответы 1

Я бы создал два запроса или одну функцию MySQL, которая вернет какой-то ответ. Если вы решили использовать функцию MySQL, вот как это сделать (настройте следующий запрос для своих целей):

delimiter $$;
  create function `function_name`() returns integer deterministic
  begin
    select count(*) into a from `table` where 1 = 1;
    if a > 0 then
      insert into `table`(`col1`, `col2`) values('val1', 'val2');
      select if (last_insert_id() > 0, 'response_200', 'response_500') into b from dual; 
      return b;
    else
      return 'response_501';
    end if;
  end $$
delimiter ;

Эту функцию вы вызовете как запрос ниже, и вы получите только одну запись с одним из указанных выше выходов:

select `function_name`() as `response`;

это похоже на то, что я делаю в своем запросе, он возвращает 1 запись, но я не могу определить, какая из них существовала, если "пользователь" или "электронная почта" существовали

Hex 02.12.2018 19:24

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