Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- user_id (primary, AI)
- username (unique)
- email (unique)
- password
- field 1
- field 2
- ...
- LOCK TABLES users WRITE;
- // users provided username and email are already taken?
- SELECT COUNT(username) username, (SELECT COUNT(email) FROM users WHERE email = 'batman@heroes.com') email FROM users WHERE username = 'batman'
- $res = fetch_array;
- if($res['username'] == 0 && $res['email'] == 0){
- INSERT INTO users (username,email,password) VALUES ('batman','batman@heroes.com','imtheonlytruehero')
- if(affected_rows == 1)
- $username = null;
- $email= null;
- $registration = true;
- }
- else {
- $username = null;
- $email= null;
- $registration = false;
- }
- }
- else {
- $username = ($res['username'] > 0) ? false : true;
- $email = ($res['email'] > 0) ? false : true;
- $registration = false;
- }
- UNLOCK TABLES;
- START TRANSACTION;
- INSERT INTO users (username,email,password) VALUES ('batman','0','imtheonlytruehero');
- if(affected_rows > 0) {
- $username = true;
- UPDATE users SET email='batman@heroes.com' WHERE username='batman';
- if(affected_rows > 0) {
- $email = true;
- $registration = true;
- COMMIT;
- }
- else {
- $email = false;
- $registration = true;
- ROLLBACK;
- }
- }
- else {
- $username = false;
- $email = null;
- $registration = false;
- ROLLBACK;
- }
- while (1) {
- START TRANSACTION;
- SELECT * FROM users WHERE username = ? OR email = ?;
- if (something_found) {
- // figure out what was found — email, login or both
- // ...
- } else {
- try {
- INSERT INTO users …;
- } catch (UniqueViolation) {
- // somebody else could have inserted a record with the same
- // username/email after our SELECT query
- ROLLBACK;
- // try again
- continue;
- }
- }
- COMMIT;
- break;
- }
- $result = $db->query('SELECT COUNT(id) as total FROM USER WHERE username = "batman" or email = "batman@heroes.com"');
- $row = $result->fetch_assoc();
- if($row['total'] > 0}{
- // redirect back to form, exit here
- }
- try{
- // no user with email, username exists, so try to insert that user
- $db->query('INSERT INTO USER ...');
- $registration = true;
- }
- catch(Exception e){
- // If a different user with same username or email registered in
- // the mean time then redirect to form.
- }
Add Comment
Please, Sign In to add comment