【问题标题】:PHP Checking if the email already exists in the databasePHP 检查电子邮件是否已存在于数据库中
【发布时间】:2019-09-17 01:27:30
【问题描述】:

我正在制作一个带有登录系统的网站。当用户想要注册并输入他的电子邮件时,MySQL 数据库中不应该已经存在一个。我正在尝试通过准备好的语句来编写我的代码。

当用户输入数据库中已经存在的电子邮件时,我希望它通过标题功能将用户发送回相同的注册页面,但出现某种错误。我试图将行数存储在一个名为 $resultcheck 的变量中,并检查是否有列具有超过 0 个相同的电子邮件(如果它已经存在)。

代码如下:

$query = "SELECT * FROM users WHERE Mail=?;";
        $stmt = mysqli_stmt_init($conn);
        if(!mysqli_stmt_prepare($stmt, $query))
        {
            header("Location: ../registrering.php?error=sqlerror");
            exit();
        }
        else
        {
            mysqli_stmt_bind_param($stmt, "s", $mail);
            mysqli_stmt_execute($stmt);
            mysqli_stmt_store_result($stmt);
            $resultCheck = mysqli_stmt_num_rows($stmt);
            if($resultcheck > 0)
            {
                header("Location: ../registrering.php?error=emailtaken");
                exit();
            }
            else {...}

但是,当我提交了一个帐户,并且数据库中已经存在电子邮件时,我成功地在表 users 中输入了另一列,并且有多个列具有相同的电子邮件。

【问题讨论】:

    标签: php html mysql email-validation


    【解决方案1】:

    除了使用 SELECT SQL 检查。您应该将 mysql 中的列设置为唯一。见https://www.w3schools.com/sql/sql_unique.asp

    【讨论】:

    • 他确实使用简单的选择检查该电子邮件是否已经有一个条目,但它似乎不起作用。
    • @theblackips 你的权利,我很抱歉。我似乎已经半睡半醒了...我删除了转储部分...
    • 如果由php代码完成,使用唯一约束有什么好处?
    • 也许有时您想进行导入并在已使用的 sql 转储中拥有一个电子邮件地址。比你不想拥有多个数据。唯一约束为您提供了始终只有一个的安全性..即使您在未来的代码或操作中犯了错误...也许也有索引专家,但我对 mysql 索引系统一无所知。我发现有人对此发表了评论:
    • @NIGHTMARE quora.com/… "拥有唯一约束还有一个额外的优势,即如果您需要为该列创建索引。这将把该列的访问时间从 On 更改为 O- 1(如果哈希表索引)或 ( ''。 - Jeetendra Dhall,2016 年 3 月 11 日
    【解决方案2】:

    您正在分配 $resultCheck,然后测试另一个名为 $resultcheck 的变量,该变量始终为 0。

    所以你的错误是你的变量命名错误。

    【讨论】:

      猜你喜欢
      • 2014-05-10
      • 2013-06-08
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      • 1970-01-01
      相关资源
      最近更新 更多