我正在尝试检查我拥有的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不再为空,代码会向用户发出警告。
然而,戈登的建议是必须的。
答案 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}';