如何检查DB中的重复条目?

时间:2010-12-07 16:11:41

标签: php mysql database

我在网站上构建了一个表单,该表单捕获了一些字段,包括“电子邮件”,并将其发布到我拥有的名为“数据”的数据库中。我正在使用jQuery Validate插件来确保所有字段都已完成,但我在db中没有重复的电子邮件地址。

该插件带有一个名为emails.php的脚本,在验证字段数据时会调用该脚本,这里是代码:

<?php
$request = trim(strtolower($_REQUEST['email']));
$emails = array('steam@valve.com', 'bill@gates.com', 'blocked@email.com');
$valid = 'true';
foreach($emails as $email) {
if( strtolower($email) == $request )
    $valid = '"Thats already taken."';
}
echo $valid;
?>

此代码段仅检查列出的电子邮件。有没有办法查询数据库搜索表'数据'并检查'电子邮件',看看是否有重复,并希望发布错误消息,如果是?

此外,当我使用任何示例电子邮件时,脚本似乎确实有效,因此它实际上是“正常工作”我只需要调整它来检查数据库。

5 个答案:

答案 0 :(得分:2)

在电子邮件列上添加唯一性约束。

答案 1 :(得分:2)

不要使用有缺陷的“INSERT之前的SELECT”方法。除非您处于全局交易中,否则“SELECT”和后续“INSERT”之间始终存在竞争条件,我怀疑这种情况。

您应该在电子邮件列上放置UNIQUE约束,然后只是尝试插入新记录并捕获唯一性SQL错误。您可以通过检查错误代码来捕获错误,对于MySQL,例如它是1062或23000,具体取决于驱动程序。

答案 2 :(得分:1)

首先,在电子邮件列上添加UNIQUE约束。然后,在注册时,运行以下查询:

SELECT COUNT(*) as 'count' FROM `data` WHERE email = 'requested@email.com';

答案 3 :(得分:0)

您只需编写一个查询来检查电子邮件是否在表格中:

$query = SELECT count(*) AS `total` FROM `data` WHERE `email` = '{$request}'
$row = mysql_fetch_assoc(mysql_query($query));
if($row['total']) echo false; //exists
else echo true; //doesn't exist

编辑意味着'回音'而不是'回报'

答案 4 :(得分:0)

你可能会使用mysql_num_rows命令检查数据库中的现有值。

这样的事情:

$result = mysql_query("SELECT email from accounts where email = $email_to_check");
$found = mysql_num_rows($result);

if ($found > 0) { echo "Email already exists"; }
else .....