php—当为true时阻止数据库中重复用户名的函数,当为true时将名称插入数据库

xbp102n0  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(307)

我做这个函数是为了在我的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,post请求中的用户名仍然被插入到我的数据库中。以下是要插入数据库的函数:

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');

    }

}

这是我的控制器,它获取post请求来注册一个名称

<?php

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

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

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

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

        'password' => $hash

    ]);
};
fykwrbwg

fykwrbwg1#

你需要 return true 如果使用用户名,否则if语句将匹配null和false:

if(!$app['database']->nameTaken($_POST['username'])){
``` `return;` 与相同 `return null;` 它是“falsy”(大致相当于false)。

相关问题