Php 检查用户是否存在:是否在不检查的情况下插入数据库?

Php 检查用户是否存在:是否在不检查的情况下插入数据库?,php,mysql,Php,Mysql,我正在创建一个登录/注册系统,我无法理解为什么输入的用户名不会检查数据库中是否存在现有用户名 电子邮件代码完美地检查是否存在现有电子邮件,但即使存在现有电子邮件,用户名也会通过 以下是用户名代码: $query = $db->prepare("SELECT * FROM `users` WHERE `username`=:username"); $query->bindParam(1, $username, PDO::PARAM_STR); $count = $query->e

我正在创建一个登录/注册系统,我无法理解为什么输入的用户名不会检查数据库中是否存在现有用户名

电子邮件代码完美地检查是否存在现有电子邮件,但即使存在现有电子邮件,用户名也会通过

以下是用户名代码:

$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!";
}
使用匿名占位符的位置索引调用bindParam,然后传递要执行的参数数组。选择一种方法或另一种方法,如果使用命名占位符,则不要使用位置索引

您根本不需要调用$query->bindParam

我不认为有必要调用strip_标签和addslashes。PDO将引用所有必要的符号

试试这个:

$query = $db->prepare("SELECT * FROM `users` WHERE `username`=:username");
$count = $query->execute(array(":username" => $_POST['username']));

你到底为什么要用斜线?这并不能解决问题,你能给我解释一下这些行吗?我不确定我是否得到了它们。我得到了你的修复,但是你能解释一下从何处选择:username和array:username=>$POST['username']@user3078911这意味着:从$\u POST数组中获取值,并将其替换为:username参数。