如何检查数据库中的重复条目?
问题描述:
我在一个网站上构建了一个表单,它捕获了几个字段,包括'email'并将它发布到一个名为'data'的表中的数据库。我使用jQuery Validate插件来确保所有字段都是完整的,但我不能在数据库中有重复的电子邮件地址。如何检查数据库中的重复条目?
插件想出了一个脚本命名emails.php它验证字段数据调用时,这里是代码:
<?php
$request = trim(strtolower($_REQUEST['email']));
$emails = array('[email protected]', '[email protected]', '[email protected]');
$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
编辑意味着“回声”而不是“回报”
答
首先,把UNIQUE
电子邮件栏的限制。然后,在注册时,运行以下查询:
SELECT COUNT(*) as 'count' FROM `data` WHERE email = '[email protected]';
答
您也许可以做一个php代码,使用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 .....
答
不要使用有缺陷的 “选择插入之前” 的做法。在你的“SELECT”和随后的“INSERT”之间总是会有一个竞争条件,除非你在全局事务中,我怀疑是这种情况。
您应该在电子邮件列上设置UNIQUE约束,然后尝试插入新记录并捕获唯一性SQL错误。您可以通过检查错误代码来捕获错误,例如,根据驱动程序,MySQL为1062或23000。
我一直认为通过设计捕捉错误是一个错误。 (我同意唯一性,但不确定捕捉错误是否是最干净的方式 - 通常我会做webbiedave建议+错误处理,以防两个用户在检查后尝试插入相同的电子邮件不存在)。 – Unreason 2010-12-07 16:47:46