前提・実現したいこと
MySQLにて新規登録時のemail重複チェックをしたいです。
コードを書いたのですが、どうも、重複チェックができず同じアドレスでも新規登録されてしまいます。
lang
1if(empty($err_msg)){ 2 $dsn = 'mysql:dbname=feel.share;host=localhost;charaset=utf8'; 3 $user = 'root'; 4 $password = 'root'; 5 $options = array( 6 // SQL実行失敗時に例外をスルー 7 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 8 // デフォルトフェッチモードを連想配列形式に設定 9 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 10 // バッファードクエリを使う(一度に結果セットを全て取得し、サーバー負荷を軽減) 11 // SELECTで得た結果に対してもrowCountメソッドを使えるようにする 12 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, 13 ); 14 15 $dbh = new PDO($dsn,$user,$password,$options); 16 17 $query = $dbh->prepare('SELECT * FROM users WHERE email = :email'); 18 19 $query->execute(array(':email' => $email)); 20 21 $result = $query->fetch(PDO::FETCH_ASSOC); 22 23 if($result > 0){ 24 $err_msg['email'] = MSG06; 25 } 26 27 $stmt = $dbh->prepare('INSERT INTO users(email,pass,login_time) VALUES (:email, :pass, :login_time)'); 28 29 $stmt->execute(array(':email' => $email,':pass' => $pass, ':login_time' => date('Y-m-d H:i:s'))); 30 31 header("Location:mypage.php"); 32 } 33
考え
このコードはバリデーションチェックをクリアし$err_msgに何も代入されていない状態です。
考えはこうです。
新規登録時にDB接続した際にSELECTでemailを検索する。
if文を使用し1件でも検索結果が出れば、MSG06をhtml内で表示する。
0件ならINSERTし新規登録を行いmypage.phpへアクセスする。
このような考えです。
ですが、重複チェックができず同じアドレスでも新規登録されてしまいます。
このような場合どのような理解でコードを書けば良いでしょうか?
回答2件
あなたの回答
tips
プレビュー