如何将代码正确设置为无法注册两个相同用户名的位置?我现在的代码是让我一遍又一遍地注册用户名!这是我目前的代码:
if(isset($_POST['username'], $_POST['password'])){
if(empty($_POST['username'])){
$errors[] = 'Username is required.';
}
if(empty($_POST['password'])){
$errors[] = 'Password is required.';
}
if(empty($errors)){
$query = "SELECT COUNT(`id`) FROM `users` WHERE `username` = :username";
$check = dbConnect()->prepare($query);
$check->bindValue(':username', $_POST['username']);
$check->execute();
if($check->rowCount() > 0){
$errors[] = 'The chosen username is already registered.';
}
if(empty($errors)){
$query = "INSERT INTO `users` (username, password) VALUES (:username,:password)";
$query = dbConnect()->prepare($query);
$query->bindValue(':username', $_POST['username']);
$query->bindValue(':password', $_POST['password']);
if(!$query->execute()){
$errors[] = 'Query failed to execute.';
} else {
header('Location: index.php');
die();
}
}
}
}
}
答案 0 :(得分:1)
这种独特的限制最好留给数据库。如果两个用户尝试使用相同的用户名同时注册,则代码将失败。在检查可用性和插入新行之间,用户名可能无法使用。
在该列上设置UNIQUE约束。
答案 1 :(得分:1)
使用rowCount
对SELECT
次查询无效 - http://ru2.php.net/manual/en/pdostatement.rowcount.php。解决问题的方法也在本手册中描述。