检查3个表以查看其中任何一个是否存在电子邮件

时间:2014-04-18 00:27:01

标签: php mysql

我正在尝试检查我拥有的3个用户表中是否存在电子邮件地址。

我试过了:

$query = "SELECT id FROM pims, dms, users WHERE pims.email = '{$email}' OR dms.email = '{$email}' OR users.email = '{$email}'";

    $result = mysqli_query($connection, $query);
        if (!result) {
            die("Database query failed: " . mysqli_error($result));
        }

        if (mysqli_num_rows($result) != 0) {
            $duplicate_email_error = "That email already exists";
            $errors = array_merge($errors, $duplicate_email_error);
        }

但它似乎不起作用。有人可以帮忙吗?


事实证明,由于以下原因,PHP没有捕获错误:

上面代码的最后4行应为:

            if (mysqli_num_rows($result) != 0) {
                $duplicate_email_error = array("That email already exists");
                $errors = array_merge($errors, $duplicate_email_error);
            }

这样,$ errors不再为空,代码会向用户发出警告。

然而,戈登的建议是必须的。

1 个答案:

答案 0 :(得分:0)

您的查询正在执行三个表中的笛卡尔积,然后过滤掉其中一个电子邮件不匹配的行 - 计算量非常大且不准确。

以下应该做你想做的事:

  SELECT id FROM pims WHERE email = '{$email}' UNION ALL
  SELECT id FROM dms WHERE email = '{$email}' UNION ALL
  SELECT id FROM users WHERE email = '{$email}';