数据库表中已存在php检查电子邮件
嗨,我对这一切有点陌生,所以请容忍我 我试图有一个表格,登记第一,最后,电子邮件到一个表中。如果电子邮件已经存在,我想转到一个页面并更新该电子邮件地址记录中的时间戳。我不知道从哪里开始。提前谢谢 编辑:澄清这里的目标是 1.人员A输入其详细信息,如果没有其电子邮件地址的记录,则会创建一条新记录,并加上时间戳,然后进入下一页数据库表中已存在php检查电子邮件,php,Php,嗨,我对这一切有点陌生,所以请容忍我 我试图有一个表格,登记第一,最后,电子邮件到一个表中。如果电子邮件已经存在,我想转到一个页面并更新该电子邮件地址记录中的时间戳。我不知道从哪里开始。提前谢谢 编辑:澄清这里的目标是 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()