#php #sql
#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, моя информация будет сохраняться в базе данных, но я хотел предотвратить дубликаты. итак, как мне обойти это? Или я должен проверять дубликаты электронной почты?
РЕДАКТИРОВАТЬ Насколько я могу судить, pinnaclecart устанавливает uid в значение primary. так не было бы «опасно» вместо этого устанавливать его уникальным?
Комментарии:
1. Какую базу данных вы используете. Сделайте свой
uid
УНИКАЛЬНЫМ, и вы будете защищены от дубликатов.2. Лучшим вариантом было бы включить уникальные ограничения в вашей таблице
3. @Nemoden, что вы имеете в виду, говоря о том, какую базу данных я использую? он использует базу данных pinnacle. uid в таблице user должен быть установлен уникальным?
4. @Josephine Следует ли устанавливать uid в таблице user уникальным, зависит от того, рассматриваете ли вы две записи с одинаковым uid в качестве дубликатов.
5. похоже, вы всегда делаете только обновления, вы хотите сказать, что хотите избежать дублирования обновлений? если так, то это, вероятно, не имеет значения.
Ответ №1:
Имя и фамилия приятные, но совсем не уникальные. Я знаю нескольких людей, у которых то же имя, что и у меня, поэтому, я думаю, создание уникального индекса по этим двум столбцам только расстроит, а не поможет. Однако что делает меня уникальным, так это то, что я единственный, у кого есть и мой адрес электронной почты, и пароль, так что я думаю, что это был бы лучший кандидат.
ALTER TABLE users ADD UNIQUE unique_emailaddress ( email );
Это должно, по крайней мере, помочь с некоторыми дубликатами, но не со всеми: у пользователей может быть несколько адресов электронной почты (я знаю, что у меня есть ;)), но это все равно лучше, чем произвольная комбинация имени и фамилии, которая вообще не уникальна.
Ответ №2:
Если все, что вам нужно, это один УНИКАЛЬНЫЙ столбец, вы можете сделать что-то вроде:
ALTER TABLE `users` ADD UNIQUE `lname`(fname);
Если вы зададите столбцу значение UNIQUE, это сделает уникальным только этот столбец, поэтому, если у вас есть два пользователя, одного зовут «Джон Смит», а другого — «Джейн Смит», уникальность в lname приведет ко второму сбою. Если вы зададите УНИКАЛЬНЫЕ ключи для полей имени и фамилии отдельно, то вы потерпите неудачу в любом случае, если имя или фамилия совпадут.
Вероятно, вместо этого вы захотите добавить составной ключ для обеспечения уникальности в нескольких объединенных полях. Для этого:
ALTER TABLE `users` ADD UNIQUE `unique_key`(fname,lname);
Это приведет к введению ограничения в базе данных, которое выдаст ошибку, если вы попытаетесь создать дублирующуюся запись с тем же именем и фамилией.
Вы можете создавать исключения при ошибке и обрабатывать их выше в своей кодовой базе, или вы можете вместо этого просто увидеть, что у вас ошибка, и проигнорировать ее.
Ответ №3:
Учитывая ваше последнее редактирование, в котором говорится
uid устанавливается pinnaclecart в значение primary. так не было бы «опасно» вместо этого устанавливать его уникальным?
В этом случае не делайте этого. И вообще ничего не делайте, PRIMARY KEY
это UNIQUE
по умолчанию, поэтому его нельзя дублировать.
Ответ №4:
Создайте УНИКАЛЬНЫЙ индекс в базе данных.