Prevent duplicates in database

前端 未结 4 1560
有刺的猬
有刺的猬 2021-01-25 16:45
$db->query(\"SELECT * FROM \".DB_PREFIX.\"users WHERE uid=\'\".$uid_id.\"\' AND login=\'ExpressCheckoutUser\'\");
                if ($db->moveNext())
                     


        
相关标签:
4条回答
  • 2021-01-25 16:51

    If all you need is a single UNIQUE column, you can do something like:

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

    If you set a column to UNIQUE it will only make that column unique, so if you have two people, one named "John Smith" and another named "Jane Smith", a UNIQUE on the lname will cause the second to fail. If you set UNIQUE keys on both first and last name fields separately, then you will fail in either case of first or last names being the same.

    You will probably instead wish to add a compound key to enforce uniqueness across multiple fields combined. For this:

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

    This would force a constraint in the database that would throw an error if you tried to create a duplicate record with the same first and last name.

    You can throw exceptions on error, and handle these higher up in your codebase, or you can instead just see that you have an error and choose to ignore it.

    0 讨论(0)
  • 2021-01-25 16:59

    Create a UNIQUE index in the database.

    0 讨论(0)
  • 2021-01-25 17:07

    First and last name are nice, but everything but unique. I know a few people that have the same name I do, so I guess building a unique index on those two columns will only frustrate, not help. The thing that makes me unique though is that I am the only one who has both my e-mail address and password, so I think that would be a better candidate.

    ALTER TABLE users ADD UNIQUE unique_emailaddress ( email );
    

    That should at least help with some of the duplicates, but not all: users may have multiple e-mail addresses (I know I do ;)), but it still better than an arbitrary combination of first and last name which isn't unique at all.

    0 讨论(0)
  • 2021-01-25 17:12

    Considering your last edit which says

    uid is set to primary by pinnaclecart. so wouldnt it be 'dangerous' to set it to be unique instead?

    In this case, don't do that. And don't do anything at all, PRIMARY KEY is UNIQUE by default, so it can not be duplicated.

    0 讨论(0)
提交回复
热议问题