Php 如何检查数据库中的重复条目?

Php 如何检查数据库中的重复条目?,php,mysql,database,Php,Mysql,Database,我在一个网站上构建了一个表单,它捕获了一些字段,包括“email”,并将其发布到我拥有的数据库中,其中包含一个名为“data”的表。我使用jQuery验证插件确保所有字段都是完整的,尽管我不能在数据库中有重复的电子邮件地址 该插件附带一个名为emails.php的脚本,在验证字段数据时调用该脚本,代码如下: <?php $request = trim(strtolower($_REQUEST['email'])); $emails = array('steam@valve.com', 'b

我在一个网站上构建了一个表单,它捕获了一些字段,包括“email”,并将其发布到我拥有的数据库中,其中包含一个名为“data”的表。我使用jQuery验证插件确保所有字段都是完整的,尽管我不能在数据库中有重复的电子邮件地址

该插件附带一个名为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;
?>

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


此外,当我使用任何示例电子邮件时,脚本似乎都能工作,因此它基本上是“工作”的,我只需调整它以检查数据库。

在电子邮件列上设置唯一性约束。

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

$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

编辑意味着“回显”而不是“返回”

首先,在电子邮件列上设置一个
唯一的
约束。然后,在注册时,运行以下查询:

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

您可以编写一段php代码,使用mysql\u num\u 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 .....
不要使用有缺陷的“插入前选择”方法。除非您处于全局事务中,否则在您的“选择”和后续的“插入”之间始终存在竞争条件,我怀疑这里的情况是否如此


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

我一直认为通过设计捕获错误是一种错误。(我同意唯一性,但不确定捕获错误是否真的是最干净的方法-我通常会按照webbiedave的建议+错误处理,以防两个用户在检查同一封电子邮件不存在后尝试插入该电子邮件)。捕获特定的已知错误是一种有效的设计。捕获并忽略所有错误是一个错误。如果您不喜欢,还有其他解决方案,例如在MySQL中,您可以执行INSERT IGNORE,然后检查受影响的行数(0行表示INSERT失败)。