Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 防止数据库中的重复_Php_Sql - Fatal编程技术网

Php 防止数据库中的重复

Php 防止数据库中的重复,php,sql,Php,Sql,每次我通过paypal付款时,我的信息都会被捕获到数据库中,但我想防止重复。那我该怎么绕过它呢?或者我应该检查电子邮件副本吗 编辑 据我所知,pinnaclecart将uid设置为primary。那么,将其设置为唯一性不是很“危险”吗 在数据库中创建唯一索引。如果您只需要一个唯一的列,您可以执行以下操作: $db->query("SELECT * FROM ".DB_PREFIX."users WHERE uid='".$uid_id."' AND login='ExpressChecko

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

编辑
据我所知,pinnaclecart将uid设置为primary。那么,将其设置为唯一性不是很“危险”吗

在数据库中创建唯一索引。

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

$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();
}
如果将列设置为唯一,则只会使该列唯一,因此,如果有两个人,一个叫“John Smith”,另一个叫“Jane Smith”,则lname上的唯一将导致第二个失败。如果您分别在“姓名”和“姓氏”字段上设置了唯一键,则在“姓名”或“姓氏”相同的情况下都会失败

相反,您可能希望添加一个复合键,以便在组合的多个字段之间强制执行唯一性。为此:

ALTER TABLE `users` ADD UNIQUE `lname`(fname);
这将在数据库中强制执行一个约束,如果您试图创建具有相同名字和姓氏的重复记录,该约束将引发错误


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

考虑到您上次的编辑

pinnaclecart将uid设置为主。那么,将其设置为唯一性不是很“危险”吗


在这种情况下,不要这样做。而且什么都不要做,
主键
在默认情况下是
唯一的
,因此它不能被复制。

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

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

这至少对某些重复项有帮助,但不是全部:用户可能有多个电子邮件地址(我知道我有;),但这仍然比任意组合的名字和姓氏要好,因为它们根本不是唯一的。

您使用的是什么数据库。将您的
uid
设置为唯一,这样您就可以避免重复。最好的选择是在您的table@Nemoden,你说我使用什么数据库是什么意思?它正在使用pinnacle数据库。表用户中的UID应该设置为唯一的吗?@约瑟芬:表用户中的UID是否应该设置为唯一性取决于是否考虑两个具有相同UID的记录作为复制品。看起来您只做了更新,您是说要避免重复更新吗?如果是的话,那可能没关系。
ALTER TABLE users ADD UNIQUE unique_emailaddress ( email );