检查电子邮件是否在两个表中


Check if email is in either of two tables

我想检查在表单中输入的电子邮件是否属于两个表之一:客户和学生。如果它存在于任何一个中,那么我想停止该过程。我不确定以下代码哪里出错了:

$email = $_POST['email'];
$sqlCheckEmail = " SELECT *
                   FROM students AS a
                   INNER JOIN clients AS b
                   ON a.Email = b.Email
                   WHERE a.Email = '$email' ";
$queryCheckEmail = $connection->query($sqlCheckEmail);
$rowExists = mysqli_num_rows($queryCheckEmail);
if( $rowExists > "0" ){
    echo "<h1>Error: Email already exists in database! <br> Redirecting......</h1>";
    header('Refresh: 2;url=../pages/register.php');
    exit();
}

您正在使用一个条件JOIN,该条件在两个表中查找匹配的电子邮件。您需要使用UNION

$sqlCheckEmail = "(SELECT *
                   FROM students
                   WHERE Email = '$email')
                   UNION
                  (SELECT *
                   FROM clients
                   WHERE Email = '$email')";
显然,如果您的列不匹配

,您可能需要调整上述内容(您需要在两个SELECT语句中具有相同数量的列,如果您希望结果有意义,您希望它们是相同类型的数据)。

注意:您对SQL注入持开放态度。您需要使用预准备语句,而不是像 $email 那样直接计算变量。当您从用户那里获取数据时,尤其(但不仅限于)如此,就像您对$email = $_POST['email'];所做的那样。

还有一个想法:$rowExists > "0"可能有效,但它并没有真正的意义。 $rowExists将是一个整数。将其与0进行比较,而不是"0"

如果你问查询,这个怎么样

Select *
From (
 select Email from students
 UNION 
 select Email from clients
 )
WHERE Email = '$email';

我发现这可能更适合您的要求。我也没有看到任何 UPPER() 外壳。在处理客户端值时可能需要考虑这一点。

我同意SQL注入。检查一下。