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

标签 php mysql sql

好的,有这个代码,它用于注册表单,但我无法用它来检查用户名是否已被占用?它所做的只是再次在数据库中创建相同的用户名,而不是返回“用户名已被占用”,如果有人可以提供帮助,我们将不胜感激。

$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>";
    }

这是我使用的代码,在评论中大家的帮助下我得到了它,谢谢大家!

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>";
    }

最佳答案

以下是表格的示例:

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

Live DEMO.

最简单的方法是,如果您更改表以使字段用户名唯一,这样,如果您尝试插入相同的用户名,则会导致重复输入错误,您可以轻松捕获该错误,如下所示:

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.";
    }
}

关于php - 检查mysql数据库中是否存在用户名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19329734/

相关文章:

mysql - 如何使用其中的值更新表列?

php - 如何在codeigniter中调用自定义助手的自定义同级方法并使用数据库

php - 我正在努力做,_POST 是空的

php - 没有原始文本弹出窗口的 Bing 翻译器小部件

php - 如何从 PHP 向数据库中插入多行数据

sql - 具有空记录输入参数的 Postgresql STRICT 函数

php - docker 上带有 Nginx、php 7.4 fpm 和 mysql 8 的 Laravel 6 比 php 7.1 上的 Laravel 4 慢

python - 我应该为 MySQL 使用什么 python 3 库?

mysql - 添加查询中不存在的列

sql - oracle sql查询列出上个月的所有日期