2016-08-27 4 views
1

私はmysqlデータベースにユニークな電子メールを追加するPHPスクリプトを持っています。 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(); 
     } 
    } 
    ?> 

私は迅速ファイルからこのスクリプトにアクセスしています:

@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() 
    } 

    } 

しかし、複数のエントリがデータベースに追加されます。

databse画面が

enter image description hereショット

ループを実行して、多くのユーザーが登録しようとしているかどうかを確認しました同時に同じメールを送信しています。 このPHPスクリプトのインスタンスを1つだけ実行し、他のインスタンスをキューに入れる方法を教えてください。 Plsは私がここにこだわっているのを助けます。

+1

最初に 'COUNT()'文を実行しようとしましたか?また、あなたはPDOを使用していて、注入に対する安全保護のためのバインドを使用していません。 ""ユーザー名からSELECTメールを送信するユーザは$ email ""; – Rasclatt

+0

ありがとうございました... PHPファイル –

+0

に組み込む方法count()here –

答えて

2
私は単にメールにUNIQUEを追加することをお勧め

:あなたは競合状態を回避するのに役立ちます

alter table users add unique (email) 

。 また、大文字と小文字が混在したシナリオを扱うのではなく、電子メールをトリミングしないようにする必要があります。

+0

上記を追加しましたが、同じメールを追加している間に行がスキップされる –

+0

これは、あなたの挿入物が例外をスローして、あなたが静かにそれをキャッチしているからです。適切なコード(ユニーク制約違反の場合は893)の例外をチェックし、適切なHTTP応答を返します(たとえば、409競合など)。 –

関連する問題