2010-11-11 2 views
1

У меня есть две таблицы (клиенты, администратор). Пользователь регистрируется по электронной почте и паролю, мне нужно проверить, существует ли в почтовом клиенте или в таблице администратора адрес электронной почты и пароль. Письма не уверены, поэтому проблем там нет. Это для работы uni, очевидно, у меня был бы лучший дизайн базы данных, чем этот, но я должен использовать то, что дается. у меня есть это:sql-запрос из двух таблиц

$email = $_POST['email']; 
$password = $_POST['password']; 

$sql = "SELECT * FROM customer, admin WHERE cus_email = '$email' 
AND cus_password = '$password' OR admin_email = '$email' AND admin_password = '$password'"; 

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

Спасибо за любую помощь :)

ответ

3

Вам действительно нужен UNION, а не JOIN здесь:

SELECT username 
    FROM Customer 
WHERE cus_email = ? AND cus_password = ? 
UNION 
SELECT adminname AS username 
    FROM admin 
WHERE admin_email = ? AND admin_password = ? 

Вы должны либо использовать заполнители - знаки вопроса - или защитить себя от SQL Injection атаки. Есть функции, которые помогут вам сделать это в PHP.

+0

Спасибо, я бы использовал хранимые процедуры, но преподаватель не учит, что, видимо, я не могу их использовать. – Elliott

+0

@Elliott: Даже внутри хранимой процедуры, если вы строите SQL динамически (как строку), вы должны быть осторожны. Если вы используете заполнители в той или иной форме, вы должны быть в безопасности. –

2
SELECT cus_id as id, 'false' as IsAdmin 
FROM customer 
WHERE cus_email = '$email' 
    AND cus_password = '$password' 
UNION ALL  
SELECT admin_id as id, 'true' as IsAdmin 
FROM admin 
WHERE admin_email = '$email' 
    AND admin_password = '$password'"; 
Смежные вопросы