简体   繁体   English

检查mysql数据库中是否存在用户名?

[英]Check if username exists in mysql database?

Ok so have this code, its for a registration form but i can't get it to check if there is already the username taken? 好的,这个代码,它的注册表格,但我无法检查是否已经使用了用户名? all it does is creates the same username in the database again, instead of returning "Username already taken" if anyone could help would be very appreciated. 所有这一切都是在数据库中再次创建相同的用户名,而不是返回“用户名已被采取”,如果有人可以提供帮助将非常感激。

$checkusernametaken = mysql_query("SELECT FROM users (username) WHERE username=username");
 if(mysql_num_rows($checkusernametaken)>=1)
    {
        echo"Username already exists";
    }
 else
    {
        $sql = "INSERT INTO users(username, password) VALUES(:username, :password)";
        $stmt = $con->prepare( $sql );
        $stmt->bindValue( "username", $this->username, PDO::PARAM_STR );
        $stmt->bindValue( "password", hash("sha256", $this->password . $this->salt), PDO::PARAM_STR );
        $stmt->execute();
        return "Registration Successful Welcome " + $checkusernametaken + "<br/> <a href='index.php'>Login Now</a>";
    }

This is the code i used and i got it working with the help of everyone in the comments, thanks heaps guys! 这是我使用的代码,我在评论中的每个人的帮助下工作,谢谢大家!

try {
        $con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
        $con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
        $sql = "INSERT INTO users(username, password) VALUES(:username, :password)";

        $stmt = $con->prepare( $sql );
        $stmt->bindValue( "username", $this->username, PDO::PARAM_STR );
        $stmt->bindValue( "password", hash("sha256", $this->password . $this->salt), PDO::PARAM_STR );
        $stmt->execute();
        return "Registration Successful <br/> <a href='index.php'>Login Now</a>";
    }
    catch( PDOException $e ) 
    {
         return "Username Taken <br/> <a href='register.php'>Try Again?</a>";
    }

Here is an example of how the table would look like: 以下是表格的示例:

CREATE TABLE `users` (
`id` INT AUTO_INCREMENT PRIMARY KEY NOT NULL,
`username` VARCHAR(30) NOT NULL UNIQUE,
`password` VARCHAR(64) NOT NULL
);

Live DEMO. 现场演示。

The simplest way would be if you change your table to make the field username unique, this way if you try to insert the same username it will result on a duplicate entry error which you can easily catch like this: 最简单的方法是,如果您更改表以使字段用户名唯一,这样如果您尝试插入相同的用户名,它将导致重复输入错误,您可以轻松地捕获这样:

try
{
    $sql = "INSERT INTO users(username, password) VALUES(:username, :password)";
    $stmt = $con->prepare($sql);
    $stmt->bindValue("username", $this->username, PDO::PARAM_STR);
    $stmt->bindValue("password", hash("sha256", $this->password . $this->salt), PDO::PARAM_STR);
    $stmt->execute();
    return "Registration Successful Welcome {$checkusernametaken}<br/><a href=\"index.php\">Login Now</a>";
}
catch (PDOException $e)
{
    if ($e->getCode() == 1062)
    {
        return "The selected username is not available...";
    }
    else
    {
        // More info at: http://php.net/manual/en/class.pdoexception.php
        return "Handle any other errors here.";
    }
}
$checkusernametaken = mysql_query("SELECT FROM users (username) WHERE username=username");

在这里你应该改为

$checkusernametaken = mysql_query("SELECT * FROM `users` WHERE lcase(`username`) = lcase('".mysql_escape_string($this->username)."')") or die(mysql_error());

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM