防止数据库中的重复

时间:2011-06-01 05:05:36

标签: php sql

$db->query("SELECT * FROM ".DB_PREFIX."users WHERE uid='".$uid_id."' AND login='ExpressCheckoutUser'");
                if ($db->moveNext())
                {

$db->assignStr("address1", $_REQUEST['address_street']);
$db->assignStr("city", $_REQUEST['address_city']);
$db->assignStr("state", $_REQUEST['address_state']);
$db->assignStr("fname", $_REQUEST['first_name']);
$db->assignStr("lname", $_REQUEST['last_name']);
$db->assignStr("email", $_REQUEST['payer_email']);

$db->assignStr("country", $country_code);
$db->assignStr("zip", $_REQUEST['address_zip']);
$db->update(DB_PREFIX."users", "WHERE uid='".$uid_id."'");
$db->reset();
}

每次我通过paypal付款时,我的信息将被捕获在数据库中,但我想防止重复。那我该怎么回事呢?或者我应该查看电子邮件副本吗?

修改 据我所知,uid被pinnaclecart设置为primary。因此将它设置为独特而不是“危险”吗?

4 个答案:

答案 0 :(得分:0)

如果您只需要一个UNIQUE列,您可以执行以下操作:

ALTER TABLE `users` ADD UNIQUE `lname`(fname);

如果将列设置为UNIQUE,它只会使该列唯一,因此如果您有两个人,一个名为“John Smith”而另一个名为“Jane Smith”,则lname上的UNIQUE将导致第二个失败。如果分别在名字和姓氏字段上设置UNIQUE键,那么在名字或姓氏相同的情况下,您将失败。

您可能希望添加复合键以强制组合多个字段的唯一性。为此:

ALTER TABLE `users` ADD UNIQUE `unique_key`(fname,lname);

如果您尝试使用相同的名字和姓氏创建重复记录,这将强制数据库中出现错误的约束。

您可以在出现错误时抛出异常,并在代码库中处理这些异常,或者只是看到您有错误并选择忽略它。

答案 1 :(得分:0)

考虑上次编辑

  

uid由pinnaclecart设置为primary。那么将它设置为独特的“危险”不是吗?

在这种情况下,不要这样做。并且根本不做任何事情,PRIMARY KEY默认为UNIQUE,因此无法复制。

答案 2 :(得分:0)

名字和姓氏都很好,但一切都很独特。我认识一些与我有相同名称的人,所以我想在这两列上建立一个唯一的索引只会让人感到沮丧,而不是帮助。让我与众不同的是,我是唯一同时拥有我的电子邮件地址和密码的人,所以我认为这将是一个更好的候选人。

ALTER TABLE users ADD UNIQUE unique_emailaddress ( email );

至少应该帮助一些副本,但不是全部:用户可能有多个电子邮件地址(我知道我这样做;)),但它仍然比名字和名字的任意组合更好根本不是唯一的。

答案 3 :(得分:-1)

在数据库中创建一个UNIQUE索引。