数据库中的多个条目

时间:2016-08-27 14:10:07

标签: php mysql database swift

我有一个PHP脚本,它向mysql数据库添加一个唯一的电子邮件。 PHP脚本是:

<?php
    try {
          $pdo = new PDO('mysql:host=localhost;dbname=ourdatabase', 'shyam', 'mypassword');
          $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
          $pdo->exec('SET NAMES "utf8"');
    }
    catch (PDOException $e) {
        exit();
    }

    try {
          $email=$_POST['email'];
          $sql = "SELECT username FROM users WHERE email LIKE '$email'";
          $result = $pdo->query($sql);
    } catch (PDOException $e) {
          exit();
    }

    if ($row = $result->fetch()) {
        $resturant[] = array('status' => "userexists");
        echo json_encode($resturant);
        exit();
    } else { 
        try {
            $sql = 'INSERT INTO users SET
               email = :mailaddress,
               password = :password,
               tagline = :tagline';

            $s = $pdo->prepare($sql);
            $s->bindValue(':mailaddress', $_POST['email']);
            $s->bindValue(':password', $_POST['password']);
            $s->bindValue(':tagline', $_POST['tagline']);
            $s->execute();
            exit();
        } catch (PDOException $e) {
             exit();
        }
    } 
   ?>

我从swift文件中访问此脚本:

@IBAction func registerClick(sender: AnyObject) {

    let url:NSURL = NSURL(string: url_to_request)!
    let session = NSURLSession.sharedSession()

    let request = NSMutableURLRequest(URL: url)
    request.HTTPMethod = "POST"
    request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData

    let paramString = "email=\(email.text!) & password=\(password.text!) & tagline=\(tagline.text!)"
    request.HTTPBody = paramString.dataUsingEncoding(NSUTF8StringEncoding)
    for index in 1...10{
    let task = session.dataTaskWithRequest (request, completionHandler: {data, response, error -> Void in })

    task.resume()
    }

    }

但是在数据库中添加了多个条目:

数据库屏幕截图

enter image description here

我运行循环以检查是否有许多用户尝试同时注册同一封电子邮件。 如何只运行此PHP脚本的一个实例并让其他人进入队列。请帮忙,因为我被困在这里。

1 个答案:

答案 0 :(得分:2)

我建议只在电子邮件中添加UNIQUE:

alter table users add unique (email)

这将有助于您避免竞争条件。 你也没有处理混合案例场景,也没有修剪你应该做的电子邮件。