【问题标题】:How do I check if value already exists in table?如何检查表中是否已存在值?
【发布时间】:2014-03-15 18:27:22
【问题描述】:

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

我想检查我的数据库中是否已经存在该电子邮件地址。我想你只要看看我的代码就知道我在追求什么:

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

}

我尝试了很多不同的方面,但我的大脑现在无法正常工作。

【问题讨论】:

  • @Rahil:请不要为了应用不同的编码标准而重新格式化代码。一般来说,这可能会意外地掩盖有问题的错误,并且无论如何编码标准的选择都是主观的。谢谢!

标签: php mysql


【解决方案1】:

使用unique constraint。尝试插入/更新记录并捕获违反唯一约束时引发的异常。这是保证唯一电子邮件地址的唯一方法;先检查再更新容易出现并发问题,因为其他人可能会在您进行检查之后和更新记录之前将他/她的记录更新为您尝试设置的相同值。

另外:学习如何使用where-clauses。您现在正在检索所有记录,对其进行迭代等,这会占用不必要的大量资源,花费太长时间并且只是一种浪费。如果您想检查符合您编写的条件的记录:

Select foo, bar from table where baz = 123

baz = 123 是您的标准。想象一下当您当前的设置中有 500 条甚至 500,000 条记录时会发生什么。数据库将执行您的查询,从该数据库收集所有行,将它们传输到您的应用程序,您的应用程序将在其中迭代所有 500,000 个结果。或者你要求数据库做它擅长的事情(以及为什么你首先使用它):给我匹配标准 X 的/所有记录。你会得到 1 或没有记录(给定唯一的约束):1 = 某些记录与您的标准匹配,无 = 不存在记录。保存传输和“手动查看”499,999 条记录;-)

【讨论】:

  • 不需要勾选;抛出的异常很容易被捕获,然后用于显示用户友好的消息。
  • 所以,虽然我相信数据库是数据的守门人,但在很多时候,早点照顾痞子并搬家会更干净涵盖逻辑向前。
  • @user2864740:那是完全不同的故事(你说的是 Ajax 的东西);为此,我将实现 IsUsernameAvailable() 方法。但这与 Anen 提出的实际问题无关,尽管从技术角度来看,这几乎是相同的,但这是一个完全不同级别的问题(或用户故事或任何你想称之为的问题)。
猜你喜欢
  • 2019-11-25
  • 1970-01-01
  • 2019-05-28
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多