2012-07-04 104 views
0

我試圖檢查數據庫中列出的電子郵件地址以確保它與任何電子郵件地址不匹配。試圖檢查數據庫中是否已經存在電子郵件

我試圖使用rowCount,據我瞭解,它會返回bool truefalse是否找到匹配項。

但是電子郵件地址仍然輸入到數據庫中。

這裏是我使用來檢查電子郵件的方法:

public function checkEmail(){ 
     if($this->post_data['reg_email'] == $this->post_data['reg_conf_email']){ 

      if(filter_var($this->post_data['reg_email'], FILTER_VALIDATE_EMAIL)){ 


       $stmt = $this->dbh->prepare("SELECT email FROM oopforum_users WHERE email = ?"); 
       $stmt->bindParam(1, $this->post_data['reg_email'], PDO::PARAM_STR); 
       $stmt->execute(); 
       $result = $stmt->rowCount(); 
       if($this->result){ 
        return true; 
       }else{ 
        return false; 
       } 
      }else{ 
       return false; 
      } 
     }else{ 
      return false; 
     } 
    } 

然後在我的調用程序我有這樣的:

if($register->checkUsername()){ 

    if(!$register->checkEmail()){ 

      //continue... 

    }else{ 
     $message = 'ERROR: That email is not valid, doesn\'t match the confirmation email or already exists on our database, please choose another one.'; 
    } 


}else{ 
    $message = 'ERROR: That username is invalid or is already taken, please choose another one and ensure it is atleast 4 characters long.'; 
} 

爲什麼不能對同一匹配的電子郵件一個在數據庫中並拋出錯誤消息?

回答

0

我想檢查一個電子郵件地址與數據庫中列出的電子郵件地址,以確保它不匹配任何。 [...]但是電子郵件地址仍然輸入到數據庫中。

首先;如果你的要求是,你永遠不能有兩個用戶使用相同的E-mail地址,我認爲你會更好執行,在數據庫(猜你使用MySQL):

ALTER TABLE oopforum_users ADD UNIQUE (email); 

一旦在數據庫中創建了一個唯一約束,就不可能再插入一次電子郵件地址。這也可以用於你在代碼中的好處;只需嘗試插入該行,並且如果失敗且錯誤代碼爲1062,則您知道唯一約束已被違反。這使您的代碼更容易,而且對數據庫的密集程度更低。

1
<?php 
    $email="SELECT count(*) as emailCount FROM oopforum_users 
      WHERE UPPER(email) ='".strtoupper($catid)."'"; 
    $rs_count=mysql_query($email) or die(mysql_error()); 
    $result = mysql_fetch_assoc($rs_count); 
    if($result['emailCount'] > 0){ 
    echo "Email Exists !!"; 
    } else { 
    echo "Email Doesn't Exists !!"; 
    } 
?> 
+0

謝謝,但我只想使用pdo。 – crm

+0

你可不可以這麼說!我的吸引力中心是sql和結果邏輯..你可以根據你的需要編寫它.. – manurajhada

相關問題