2010-11-11 135 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'"; 

不是很好用连接,因此我还没有尝试一个这个。

感谢所有帮助:)

回答

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 2010-11-11 20:39:39

+0

@Elliott:即使在存储过程中,如果动态构建SQL(作为字符串),您必须小心。如果你以某种形式使用占位符,你应该是安全的。 – 2010-11-11 20:41:55

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'";