2012-07-04 117 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

相关问题