我有一个网站,它有两种类型的用户,医生和病人。我将有关这两种类型的用户的信息存储在两个不同的表中。当用户登录时,我想检查用户提交的登录名是否存在于第一个表(例如:患者)或第二个表(例如:医生)中。我该怎么做?
下面是我的代码的一部分,其中包含我编写的 SELECT 语句:
$query =
"SELECT username, password
FROM patient
WHERE username='$username' AND password='$password'";
我目前正在从患者桌上SELECT
,但我想知道如何从病床和医生桌上SELECT
。
你能帮我吗?
您可以使用
MySQL的UNION()
函数执行此操作。
$query = "SELECT username, password
FROM table_1
WHERE username='$username' AND password='$password'
UNION
SELECT username, password
FROM table_2
WHERE username='$username' AND password='$password'";
Nota:字符串变量必须用引号括起来。
不过,我必须指出,此方法对SQL注入开放,我希望您不要以纯文本形式存储密码。
如果您以纯文本形式存储密码,则强烈建议不要这样做,并且容易使您的网站受到损害。
建议使用 CRYPT_BLOWFISH 或 PHP 5.5 的password_hash()
函数。
对于 PHP <5.5,请使用 password_hash() compatibility pack
。
另外,在SQL注入方面,将mysqli
与预准备语句一起使用,或将PDO与预准备语句一起使用,它们要安全得多。
您的 DBMS 是否支持 UNION 语句?
$query = "SELECT username,password FROM patient WHERE username='$username' AND password='$password' UNION SELECT username,password FROM othertable WHERE username='$username' AND password='$password";