PDO rowCount用于现有用户名

时间:2014-01-19 17:38:59

标签: php pdo

如何将代码正确设置为无法注册两个相同用户名的位置?我现在的代码是让我一遍又一遍地注册用户名!这是我目前的代码:

    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();
                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

这种独特的限制最好留给数据库。如果两个用户尝试使用相同的用户名同时注册,则代码将失败。在检查可用性和插入新行之间,用户名可能无法使用。

在该列上设置UNIQUE约束。

答案 1 :(得分:1)

使用rowCountSELECT次查询无效 - http://ru2.php.net/manual/en/pdostatement.rowcount.php。解决问题的方法也在本手册中描述。