0

我正在尝试根据数据库中列出的电子邮件地址检查电子邮件地址,以确保它不匹配。

我尝试使用rowCount我理解的返回布尔值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.';
}

为什么它不将电子邮件与数据库中的同一电子邮件匹配并抛出错误消息?

4

2 回答 2

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 !!";
  }
?>
于 2012-07-04T12:07:16.420 回答
0

我正在尝试根据数据库中列出的电子邮件地址检查电子邮件地址,以确保它不匹配。[...] 但电子邮件地址仍会输入数据库。

首先; 如果您的要求是您永远不能有两个用户使用相同的电子邮件地址,我认为您最好在数据库中强制执行它(猜测您使用的是 MySQL):

ALTER TABLE oopforum_users ADD UNIQUE ( email );

一旦您在数据库中创建了唯一约束,就不可能两次插入电子邮件地址。这也可以用于代码中的好处;只需尝试插入该行,如果它失败并显示错误代码 1062,您就知道违反了唯一约束。这使您的代码更容易,并且在数据库上的密集度更低。

于 2012-07-04T11:05:21.177 回答