检查用户名是否已存在于数据库中

Check if username already exist in DB

我正在尝试验证注册表单中的用户名字段并检查所选用户名是否已存在于数据库中但未按预期工作。我不确定如何解决这个问题。这是来源

$query = "SELECT * FROM users WHERE username = :username";
$sq = $pdo->prepare($query);
$sq->execute(array(
         ':username'    => $username                                
        ));
$res=$sq->fetch();
if (!$res) {
    echo ' Database Error Occured ';
}
else { echo "username already exist in database"; }

if ($res === 0) {
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->beginTransaction();
    try 
    {
         $sql = "INSERT INTO users ( username, password, email, path)
                            VALUES (:username, :password, :email, :path)";

                $q = $pdo->prepare($sql);
                $q->execute(array(
                    ':username' => $username,
                    ':password' => $password,
                    ':email'    => $email,
                    ':path'     => $path                                
                    ));                 

                $lastInsertID = $pdo->lastInsertId();
                $sql = $pdo->prepare("UPDATE users SET level=:user_id WHERE user_id=:user_id");
                $sql->execute(array(
                    ':user_id'  => $lastInsertID
                    ));
                $pdo->commit();     
     }

当我点击提交按钮时发生的事情如果我输入的用户名存在我得到 username already exist in database 但如果我输入另一个不存在我得到 Database Error Occured

你必须更换这个

 if (!$res) {
        echo ' Database Error Occured ';
    }
    else { echo "username already exist in database"; }
if ($res === 0) {

通过这个

if ($res) {
    echo "username already exist in database";
}else{

因为$sq->fetch()returnsFALSE(不存在)。您应该将检查更改为:

if ($res) {
    echo "username already exist in database";
}

if ($res === FALSE) {
// Username does not exist
}
if(1 < $res->rowCount()){
    print('username already exist');
}