设置为true时阻止数据库中重复的用户名的功能,设置为true时将名称插入数据库中

时间:2018-08-15 23:54:56

标签: php mysql

我做了这个功能是为了防止我的mysql数据库在注册时重复用户名。如果返回false,则可以指定名称:

public function nameTaken($username){

    $statement = $this->pdo->prepare('SELECT count(*) FROM users WHERE name = :name');

    $statement->execute(array('name' => $username));

    $res = $statement->fetch(PDO::FETCH_NUM);

    $exists = array_pop($res);

    if ($exists > 0) {

        echo 'user already exists';

        return;

    } else {
        //the name can be made
        return false;
    }
}

当我对其进行测试时,即使它回显了用户已经存在并且没有返回false的情况,来自发布请求的用户名仍被插入到我的数据库中。这是我要插入数据库的函数:

public function insert($table, $parameters){

    $sql = sprintf(

        'insert into %s (%s) values (%s)',

        $table,

        implode(', ', array_keys($parameters)),

        ':' . implode(', :', array_keys($parameters))

    );

    try {
        $statement = $this->pdo->prepare($sql);

        $statement->execute($parameters);

    }   catch (Exception $e) {

        die('something went wrong');

    }

}

这是我的控制器,它获得发布请求以注册名称

<?php

$hash = password_hash($_POST['password'], PASSWORD_BCRYPT);

if(!$app['database']->nameTaken($_POST['username'])){

    $app['database']->insert('users', [

        'name' => $_POST['username'],

        'password' => $hash

    ]);
};

1 个答案:

答案 0 :(得分:2)

使用用户名时,您需要return true,否则您的if语句将匹配null和false:

if(!$app['database']->nameTaken($_POST['username'])){

return;return null;相同,为“ falsy”(松散等效于false)。