我正在创建一个登录/注册系统,我根本不明白为什么输入的用户名不会检查数据库中是否有现有的用户名。
电子邮件代码会完美地检查是否有现有的电子邮件,但即使有现有的,用户名也会通过!
这是用户名代码:
$query = $db->prepare("SELECT * FROM `users` WHERE `username`=:username");
$query->bindParam(1, $username, PDO::PARAM_STR);
$count = $query->execute(array(":username" => strip_tags(addslashes($_POST['username']))));
if ($query->rowCount() == 1)
{
$errors[] = "Time to be original! That user already exists!";
}
这是工作电子邮件代码:
$query = $db->prepare("SELECT * FROM `users` WHERE `email`=:email");
$count = $query->execute(array(":email" => strip_tags(addslashes($_POST['email']))));
if ($query->rowCount() == 1)
{
$errors[] = "Please pick a new email! That email is taken!";
}
-
您根本不需要调用
$query->bindParam
。 -
我认为没有必要调用
strip_tags
和addslashes
。PDO将引用所有必要的符号。
试试这个:
$query = $db->prepare("SELECT * FROM `users` WHERE `username`=:username");
$count = $query->execute(array(":username" => $_POST['username']));
使用位置索引(对于匿名占位符)调用bindParam()
,然后将参数数组传递给execute()
。选择一种或另一种方法(如果使用命名占位符,则不要使用位置索引)。