Вы видите, у меня есть этот запрос:
$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) не существует в таблице admin / staff, мы вставляем значения, они работают довольно быстро и быстро, но хорошее решение не всегда приносит радугу.
если мы не смогли вставить какие-либо значения в таблицу, я возвращаю это сообщение об ошибке
echo "User already exists. Please choose a different email address or username.";
Поскольку я не могу определить, какой из них существовал, я хотел бы, чтобы в случае имени пользователя или адреса электронной почты была возвращена конкретная ошибка возврата.
Должен ли я разделить запрос (один выбор, затем вставить) или есть другой способ, которым я не могу найти в Интернете, чтобы сделать это в том же запросе?
Моя цель — вернуть конкретное сообщение об ошибке с помощью этого запроса, например:
«Ошибка: имя пользователя уже существует» или
«Ошибка: электронная почта уже существует.»
Спасибо за проверку и пытаясь помочь мне заранее!
Я бы создал два запроса или одну функцию 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`;
Других решений пока нет …