$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, моя информация будет записана в базу данных, но я хочу предотвратить дубликаты. так как мне обойти это? Или я должен проверить дубликаты электронной почты?
EDIT Насколько я могу судить, uid задается первичным с помощью pinnaclecart. так не было бы «опасно» установить его уникальным?
Имя и фамилия хороши, но все, кроме уникальных. Я знаю нескольких людей, которые имеют то же имя, что и я, поэтому я думаю, что создание уникального индекса на этих двух столбцах будет только сорвать, а не помогать. Единственное, что делает меня уникальным, это то, что я единственный, у кого есть мой адрес электронной почты и пароль, поэтому я думаю, что это был бы лучший кандидат.
ALTER TABLE users ADD UNIQUE unique_emailaddress ( email );
Это должно, по крайней мере, помочь с некоторыми дубликатами, но не для всех: у пользователей может быть несколько адресов электронной почты (я знаю, что я делаю;)), но это все же лучше, чем произвольная комбинация имени и фамилии, которая не является уникальной вообще.
Если вам нужно всего один столбец UNIQUE, вы можете сделать что-то вроде:
ALTER TABLE `users` ADD UNIQUE `lname`(fname);
Если вы установите столбец UNIQUE, он сделает только этот столбец уникальным, поэтому, если у вас есть два человека, один из которых называется «Джон Смит», а другой – «Джейн Смит», UNIQUE на lname приведет к сбою второго. Если вы устанавливаете ключи UNIQUE как в первом, так и в именином имени отдельно, то вы будете терпеть неудачу в том случае, если имена первых или фамилий совпадают.
Возможно, вы, скорее всего, захотите добавить составной ключ, чтобы обеспечить уникальность для нескольких полей в сочетании. Для этого:
ALTER TABLE `users` ADD UNIQUE `unique_key`(fname,lname);
Это приведет к ограничению в базе данных, которое вызовет ошибку, если вы попытаетесь создать дубликат записи с тем же именем и фамилией.
Вы можете делать исключения из ошибок и обрабатывать их выше в своей кодовой базе, или вместо этого можете просто увидеть, что у вас есть ошибка, и вы хотите игнорировать ее.
Учитывая ваше последнее изменение, в котором говорится:
uid устанавливается на первичный с помощью pinnaclecart. так не было бы «опасно» установить его уникальным?
В этом случае не делайте этого. И ничего не делайте, PRIMARY KEY
по умолчанию UNIQUE
, поэтому его нельзя дублировать.
Создайте индекс UNIQUE в базе данных.