如何检查表中是否已存在值?

时间:2014-03-15 18:27:23

标签: php mysql

我在数据库中一直在努力“检查电子邮件是否存在 - 问题”。整个功能是关于更改您帐户的电子邮件地址。

我想检查数据库中是否已存在电子邮件地址。如果您只检查我的代码,我想你会知道我在追求什么:

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";
    }
}

}

我尝试了许多不同的方面,但我的大脑现在还没有工作。

1 个答案:

答案 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条记录; - )