我在数据库中一直在努力“检查电子邮件是否存在 - 问题”。整个功能是关于更改您帐户的电子邮件地址。
我想检查数据库中是否已存在电子邮件地址。如果您只检查我的代码,我想你会知道我在追求什么:
if($_POST["changeemail2"]=="Send request")
{
$newemail=$_POST["newmail"];
$sql="SELECT email FROM tbluser";
$result=$objMysql->query($sql);
while($dbmails = mysql_fetch_assoc($result))
{
if(in_array($newmail, $dbmails) && empty($_SESSION["emailerror"]))
{
$_SESSION["emailerror"]="That e-mail address<br />is already in use.";
}
}
if(empty($newemail))
{
$_SESSION["emailerror"]="You didn't select<br />a new e-mail address";
}
if($_SESSION["emailerror"]=="")
{
$oldemail=$_SESSION["user"]["email"];
if($objMysql->sendchangeEmail($oldemail, $newemail))
{
$_SESSION["emailsuccess"]="E-mail verification has been sent to your current e-mail.";
$code="success";
}
}
}
我尝试了许多不同的方面,但我的大脑现在还没有工作。
答案 0 :(得分:2)
使用unique constraint
。尝试插入/更新记录并捕获违反唯一约束时抛出的异常。这是保证唯一电子邮件地址的唯一方法;首先检查然后更新很容易出现并发问题,因为有人可能会在您进行检查之后和更新记录之前将他/她的记录更新为您尝试设置的相同值。
另外:学习如何使用where
- 条款。你现在正在检索所有记录,迭代它们等,这需要不必要的资源,耗时太长而且只是一个简单的浪费。如果要检查与您编写的条件匹配的记录:
Select foo, bar from table where baz = 123
baz = 123
是你的标准。想象一下,当前设置中有500甚至500,000条记录时会发生什么。数据库将执行您的查询,从该数据库收集所有行,将它们传输到您的应用程序,您的应用程序将迭代所有500,000个结果。或者你问DB做什么这是很好的(为什么你要在第一时间使用它):给我的/所有结果那场比赛的绕圈十,你会得到1条或无记录(给出的唯一约束):1 =某些记录符合您的标准,none =没有记录存在。保存转移和“手动查看”499,999条记录; - )