查询mySQL以检查用户是否已存在于两个表中

安吉利斯44

我正在关注有关如何为网站创建用户注册系统的教程。我已经完成了这一步,但是我需要检查两个表中的多个值以查看它们是否存在。本教程不执行此操作。

这是我的注册表:

<form action="/members/register/" name="registerForm">
    <div>
        <h2>Register</h2>
        <h6>welcome</h6>
        <div class="register">
            <input type="text" name="firstname" placeholder="First Name" required>
            <input type="text" name="lastname" placeholder="Last Name" required>
            <input type="text" name="email" placeholder="Email" required>
            <label for="dob">Date of Birth:
                <input type="date" name="dob" id="dob" placeholder="Date of Birth" required>
            </label>
            <input type="text" name="username" placeholder="Username" required>
            <input type="password" name="password" placeholder="Password" required>
            <input type="password" name="passwordconfirm" placeholder="Confirm Password" required>
            <p>By creating an account you agree to our <a href="/legal/terms-of-use/">Terms &amp; Privacy</a>.</p>
            <button type="submit" name="registerNow">Register</button>
        </div>
    </div>
</form>

我需要检查的mySQL数据库表是:

users
  -id
  -username
  -password
  -userID (foreign key)

registered
  -id
  -nameFirst
  -nameLast
  -email
  -dob

我需要创建一个查询来检查是否存在以下任何一项:1)姓和名在一起,2)用户名,或3)电子邮件。

此外,一旦我了解了如何执行这样的查询,我对查询中的内容还是有些困惑?另外,此代码示例仅检查用户名是否存在,并输出“用户名已存在”。请选择另一个。我需要根据表中已经存在的字段输出不同的内容。这是教程中的代码:

if ($stmt = $con->prepare('SELECT id, password FROM accounts WHERE username = ?')) {
// Bind parameters (s = string, i = int, b = blob, etc), hash the password using the PHP password_hash function.
$stmt->bind_param('s', $_POST['username']);
$stmt->execute();
$stmt->store_result();
// Store the result so we can check if the account exists in the database.
if ($stmt->num_rows > 0) {
    // Username already exists
    echo 'Username already exists. Please choose another.';
} else {
    // Insert new account
}
$stmt->close();
} else {
// Something is wrong with the sql statement, check to make sure accounts table exists with all 3 fields.
echo 'Could not prepare statement!';
}
$con->close();

会是这样吗?

SELECT id, password 
FROM users, registered 
WHERE users.username = ? OR (registered.nameFirst = ? AND registered.nameLast = ?) OR registered.email = ?

再说一次,我正在学习如何使用本教程来做到这一点,所以我不想就代码的操作方式对代码进行任何更改。我了解有更好的方法可以做到这一点。我以此为起点来学习和进步。

缺口

由于您要做的只是检查注册值是否已经存在,因此使用EXISTS子查询而不是将JOIN两个表放在一起可能是最简单的像这样:

SELECT
    EXISTS (SELECT * FROM users WHERE username = ?) AS found_username,
    EXISTS (SELECT * FROM registered WHERE nameFirst = ? AND nameLast = ?) AS found_name,
    EXISTS (SELECT * FROM registered WHERE email = ?) AS found_email

在此查询中,?代表用户名,名字,姓氏和电子邮件值的占位符。使用带占位符的预准备语句的目的是防止SQL注入,有关更多信息,请参见此Q&A使用它们还具有消除输入中转义特殊字符的好处(例如,如果要O'Hara使用单引号括起来的值插入nameLast字段)。

因此,对于您的代码,您将执行以下操作:

if ($stmt = $con->prepare('SELECT
        EXISTS (SELECT * FROM users WHERE username = ?) AS found_username,
        EXISTS (SELECT * FROM registered WHERE nameFirst = ? AND nameLast = ?) AS found_name,
        EXISTS (SELECT * FROM registered WHERE email = ?) AS found_email')) {
    // Bind parameters (s = string, i = int, b = blob, etc)
    $stmt->bind_param('ssss', $_POST['username'], $_POST['firstname'], $_POST['lastname'], $_POST['email']);
    $stmt->execute();
    $stmt->bind_result($found_username, $found_name, $found_email);
    $stmt->fetch();
    // Store the result so we can check if the account exists in the database.
    if ($found_username) {
        // Username already exists
        echo 'Username already exists. Please choose another.';
    }
    elseif ($found_name) {
        // Name already exists
        echo 'Name already exists. Please choose another.';
    }
    elseif ($found_email) {
        // Email already exists
        echo 'Email already exists. Please choose another.';
    }
    else {
        // Insert new account
    }
    $stmt->close();
} 
else {
    // Something is wrong with the sql statement, check to make sure accounts table exists with all 3 fields.
    echo 'Could not prepare statement!';
}
$con->close();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

检查给定的日期是否存在于mysql中的两个日期列之间

如何检查注册页面中给定的用户名是否存在于两个表中的某些表中

检查一个值是否存在于两个或多个数组中

无法检查用户是否存在于mysql中

检查给定的两个单词是否存在于PHP字符串中

值必须存在于两个表中

检查值是否存在于选择查询中的另一个表中

检查两个不同列中df中的两个值是否存在于不同df中?

与母版页检查用户是否存在于C#中的MySQL表上

如何通过java检查用户输入的用户ID是否已存在于firebase中?

检查值存在于两个表之间,不存在

如何检查数组中的时间范围是否存在于 PHP 中的两个时间变量之间

检查两个列表中的值之一是否存在于 ruby 的字符串中

如何检查字典的两个值是否存在于同一索引中?

如何检查单元格数据是否存在于两个不同的数据帧行中

检查具有指定电子邮件的用户是否已存在于 firebase 中

无法检查用户是否已存在于我的数据库中

检查两个MySQL表中是否存在值

检查文件是否存在于两个目录中,删除两个目录中都不存在的文件

如何检查类是否已存在于 Django 中?

检查生成的密钥是否已存在于文件中

检查值是否已存在于字典列表中?

检查值是否已存在于Firebase中?

如何检查元素是否已存在于列表中

检查用户名和电子邮件已存在于 php mysql 中

如何检查查询的IN子句中的所有值是否存在于表的列中

检查记录是否存在于其他表中

检查id是否存在于其他表中

检查用户是否存在于MySQL数据库中失败