我正在尝试检查数据库中列出的电子邮件地址,以确保它与任何数据库都不匹配。
我尝试使用rowCount
我理解返回bool true
或false
是否找到匹配。
但电子邮件地址仍会输入数据库。
以下是我用来检查电子邮件的方法:
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 :(得分: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 !!";
}
?>
答案 1 :(得分:0)
我正在尝试检查数据库中列出的电子邮件地址,以确保它与任何数据库都不匹配。 [...]但电子邮件地址仍会输入数据库。
首先;如果您的要求是您永远不会有两个具有相同电子邮件地址的用户,我会认为您最好在数据库中执行该操作(猜测您使用的是MySQL):
ALTER TABLE oopforum_users ADD UNIQUE ( email );
在数据库中创建唯一约束后,无法两次插入电子邮件地址。这也可以用于您在代码中的好处;只需尝试插入行,如果失败并显示错误代码1062,则表示已违反唯一约束。这使您的代码更容易,而且数据库的密集程度也更低。