вы видите, у меня такой запрос:
$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.";
Поскольку я не могу определить, какой из них существует, я хотел бы получить конкретную ошибку возврата для имени пользователя или адреса электронной почты.
Должен ли я разделить запрос (один выбор, затем вставить) или есть другой способ, которым я не нахожу в Интернете, чтобы сделать это в том же запросе?
Моя цель - вернуть конкретное сообщение об ошибке с помощью этого запроса, например:
«Ошибка: имя пользователя уже существует» или «Ошибка: адрес электронной почты уже существует».
Спасибо за проверку и попытку помочь мне заранее !.
Пожалуйста, покажите более полный блок кода PHP (не фрагменты строки), поскольку это сообщение об ошибке, заданное пользователем. Нам нужно увидеть условную логику.






Я бы создал два запроса или одну функцию 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 запись, но я не могу определить, какая из них существовала, если "пользователь" или "электронная почта" существовали
Я бы создал два запроса или одну функцию MySQL, которая вернет какой-то ответ.