我做这个函数是为了在我的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
]);
};
1条答案
按热度按时间fykwrbwg1#
你需要
return true
如果使用用户名,否则if语句将匹配null和false: