我做了这个功能是为了防止我的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
]);
};
答案 0 :(得分:2)
使用用户名时,您需要return true
,否则您的if语句将匹配null和false:
if(!$app['database']->nameTaken($_POST['username'])){
return;
与return null;
相同,为“ falsy”(松散等效于false)。