Mysql 验证PDO中的电子邮件和用户名
下面的代码是一个注册表单,在将数据插入数据库之前,我们会检查用户名和电子邮件是否已被占用,实际上它是在Mysql 验证PDO中的电子邮件和用户名,mysql,email,mysqli,pdo,Mysql,Email,Mysqli,Pdo,下面的代码是一个注册表单,在将数据插入数据库之前,我们会检查用户名和电子邮件是否已被占用,实际上它是在phpmysqli中编写的,在那里它工作得很好,但现在我正在切换到PDO。代码工作正常,数据被插入,但它不检查电子邮件和用户名,我的意思是我们可以用相同的电子邮件和用户名再次插入数据。我不知道为什么它不能在这个PDO格式中工作,它在简单的php标准中工作得很好,可能是因为我还没有接触到PDO。请帮帮我。我想要的是在将数据插入数据库之前检查电子邮件和用户名,如果它们已经被获取,则不会插入数据,我们
php
mysqli
中编写的,在那里它工作得很好,但现在我正在切换到PDO。代码工作正常,数据被插入,但它不检查电子邮件和用户名,我的意思是我们可以用相同的电子邮件和用户名再次插入数据。我不知道为什么它不能在这个PDO格式中工作,它在简单的php标准中工作得很好,可能是因为我还没有接触到PDO。请帮帮我。我想要的是在将数据插入数据库之前检查电子邮件和用户名,如果它们已经被获取,则不会插入数据,我们会收到错误消息
$exists = "";
$query = $db->prepare("SELECT COUNT (username) from userss WHERE username = :username ");
$query->execute(array(':username'=>$un));
if ($query->fetchAll() == 1) {
$exists .= "u";
}
$query = $db->prepare("SELECT COUNT (email) from userss WHERE email = :email ");
$query->execute(array(':email'=>$em));
if ($query->fetchAll() == 1) {
$exists .= "e";
}
if ($exists == "u") echo "<p><b>Error:</b> Username already exists!</p>";
else if ($exists == "e") echo "<p><b>Error:</b> Email already exists!</p>";
else if ($exists == "ue") echo "<p><b>Error:</b> Username and Email already exists!</p>";
else {
$stmt = "INSERT INTO userss (username,first_name,last_name,email,password,password2,)
VALUES (:username,:first_name,:last_name,:email,:password,:password2,)";
$query = $db->prepare( $stmt );
$query->execute( array(':username'=>$un,':first_name'=>$fn,':last_name'=>$ln,':email'=>$em,
':password'=>$pswd,':password2'=>$pswd2,));
if ($query->rowCount() == 1) {
header("Location: login.php");
}
else {
echo "error";
}
$exists=”“;
$query=$db->prepare(“从userss中选择COUNT(username),其中username=:username”);
$query->execute(数组(':username'=>$un));
如果($query->fetchAll()==1){
$exists.=“u”;
}
$query=$db->prepare(“选择来自userss的计数(电子邮件),其中电子邮件=:email”);
$query->execute(数组(':email'=>$em));
如果($query->fetchAll()==1){
$exists.=“e”;
}
如果($exists==“u”)echo“错误:用户名已经存在!”;
如果($exists==“e”)echo“错误:电子邮件已经存在!”;
否则如果($exists==“ue”)回显“错误:用户名和电子邮件已经存在!”;
否则{
$stmt=“插入userss(用户名、名、姓、电子邮件、密码、密码2,)
值(:username、:first_name、:last_name、:email、:password、:password2、)”;
$query=$db->prepare($stmt);
$query->execute(数组(':username'=>$un',:first_name'=>$fn',:last_name'=>$ln',:email'=>$em,
“:password'=>$pswd'”:password2'=>$pswd2,);
如果($query->rowCount()==1){
标题(“Location:login.php”);
}
否则{
回声“错误”;
}
返回一个数组,因此您应该通过计算元素来检查是否返回了任何数据,如下所示:
if (count($query->fetchAll()) > 0)
请注意,它正在测试大于零的数据,如果您的数据库已经有重复的数据,这将防止出现更多数据。而不是
if ($query->fetchAll() == 1)
尝试:
$query->fetchAll();
将返回多维数组,并且您的查询想要返回计数
,因此使用作为
为计数创建别名,您的查询应该如下
$query = $db->prepare("SELECT COUNT (username) AS user_count from userss WHERE username = :username ");
$query->execute(array(':username'=>$un));
if ($query->fetch()['user_count'] > 0) {
$exists .= "u";
}
$query = $db->prepare("SELECT COUNT (email) AS email_count from userss WHERE email = :email ");
$query->execute(array(':email'=>$em));
if ($query->fetch()['email_count'] > 0) {
$exists .= "e";
}
什么不起作用?有错误消息吗?测试失败了吗?没有错误,即使已经存在用户名和电子邮件,也会插入数据,我假设会收到用户名和电子邮件之类的错误消息,请选择另一个。只是出于兴趣!为什么要对密码2进行哈希运算,这是
确认密码
?为什么将其存储在数据库中?DUH“那里只是为了检查用户没有输入2个不同的密码,即输入错误。
if ($query->fetchColumn() > 0)
$query = $db->prepare("SELECT COUNT (username) AS user_count from userss WHERE username = :username ");
$query->execute(array(':username'=>$un));
if ($query->fetch()['user_count'] > 0) {
$exists .= "u";
}
$query = $db->prepare("SELECT COUNT (email) AS email_count from userss WHERE email = :email ");
$query->execute(array(':email'=>$em));
if ($query->fetch()['email_count'] > 0) {
$exists .= "e";
}