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