Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数据库表中已存在php检查电子邮件_Php - Fatal编程技术网

数据库表中已存在php检查电子邮件

数据库表中已存在php检查电子邮件,php,Php,嗨,我对这一切有点陌生,所以请容忍我 我试图有一个表格,登记第一,最后,电子邮件到一个表中。如果电子邮件已经存在,我想转到一个页面并更新该电子邮件地址记录中的时间戳。我不知道从哪里开始。提前谢谢 编辑:澄清这里的目标是 1.人员A输入其详细信息,如果没有其电子邮件地址的记录,则会创建一条新记录,并加上时间戳,然后进入下一页 人员B输入他们的详细信息,他们之前已注册,数据库更新他们的记录时间戳,然后他们进入下一页 使用此代码创建一个函数,并在插入之前调用该函数,以检查电子邮件是否已存在。我相信注册

嗨,我对这一切有点陌生,所以请容忍我

我试图有一个表格,登记第一,最后,电子邮件到一个表中。如果电子邮件已经存在,我想转到一个页面并更新该电子邮件地址记录中的时间戳。我不知道从哪里开始。提前谢谢

编辑:澄清这里的目标是

1.人员A输入其详细信息,如果没有其电子邮件地址的记录,则会创建一条新记录,并加上时间戳,然后进入下一页

  • 人员B输入他们的详细信息,他们之前已注册,数据库更新他们的记录时间戳,然后他们进入下一页

  • 使用此代码创建一个函数,并在插入之前调用该函数,以检查电子邮件是否已存在。我相信注册和更新电子邮件地址时,你需要检查电子邮件是否已经存在,这样你也可以重复使用它。 我想

    你有pdo对象

    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
    
    then use
    
    function email_exists($pdo, $email){
        $stmt = $pdo->query("SELECT * FROM sessions WHERE email=:email");
        $stmt->execute(['email' => $email]); 
        if ($stmt->fetch()){
           return true;
        } else {
            return false;
        }
    }
    

    请尝试浏览,它将帮助您完成所有工作。

    您可以首先将数据库表中的
    电子邮件
    字段设置为
    唯一

    然后,将SQL语句替换为:

    INSERT INTO sessions (first, last, email) VALUES (:first, :last, :email)
    ON DUPLICATE KEY UPDATE session_timestamp=NOW()
    
    我假设您提到的时间戳字段名为
    session\u Timestamp

    当表中不存在电子邮件时,SQL语句向表中插入一个新的会话行;否则,如果电子邮件已经存在,它将用当前时间更新时间戳字段。您不需要为另一个数据库操作转发到另一个页面,这将:

  • 使您的代码难以管理
  • 废物装载时间

  • 参考

    如果您的列设置了约束,它将限制您,除此之外,您可以尝试使用传入的电子邮件检索记录(如果从php端找到约束),并更新时间戳。使用
    SELECT*from sessions检查用户是否存在,其中email=:email
    。您好,谢谢您的回答。换句话说,我对所有这些lol都很陌生,所以如果你能帮我推荐代码,并把它放在我上面的代码中,我会非常感激,但是如果你是新手,你应该学习。因此,从伪函数开始<代码>如果选择电子邮件,则更新时间戳,否则插入会话
    。您有要插入的代码,因此其他代码不应该是问题。令人惊讶的是,没有人建议将
    替换为
    插入。。。。重复更新时
    仍然不正确<代码>$pdo
    在此函数中不可访问。@Raptor我已将$pdo作为参数添加到函数中。我还想建议创建一个类,这样pdo对象在整个类中都是可用的,使用$this->pdo,他可以完成这项工作。可能吧,但这实际上取决于整个代码结构。如果代码只是一个很小的脚本,那么创建一个类来包装整件事就太多了。@Raptor是的,但我的假设是,至少他会创建、插入、选择、删除、更新,所以包装这些是有意义的。是的,最好使用一个查询,唯一的问题是如果他想重用电子邮件复制验证,他不能使用它,但这种情况很少发生。@PrafullaKumarSahu这只是一种观点。我永远不会相信数据库结构用于我的域的逻辑。@RonvanderHeijden是的,可能你想选择现有的结构,因为这样会减少工作量,根据需要和意见,可以有多种选择。@PrafullaKumarSahu我不是说现有结构或减少工作量。我不会建议在数据库中硬编码域逻辑。@RonvanderHeijden哦!是的,这是个好建议。
    INSERT INTO sessions (first, last, email) VALUES (:first, :last, :email)
    ON DUPLICATE KEY UPDATE session_timestamp=NOW()