下面的代码是一个注册表单,其中在将数据插入数据库之前我们检查如果已经使用了用户名和电子邮件,实际上它是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";
}
答案 0 :(得分:0)
$query->fetchAll()
返回一个数组,因此您应该通过计算元素来检查是否返回了任何数据,如下所示:
if (count($query->fetchAll()) > 0)
请注意,如果您的数据库已经有重复项,则测试大于零,这样会阻止更多。
答案 1 :(得分:0)
而不是
if ($query->fetchAll() == 1)
尝试:
if ($query->fetchColumn() > 0)
答案 2 :(得分:0)
$query->fetchAll();
将返回多维数组,并且您的查询要返回COUNT
,因此使用AS
为计数创建别名,您的查询应该像
$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";
}