我已经设置了pdo连接并将其作为变量传递给函数。一切正常,函数返回正确。如果我在带有PDO变量的条件语句中运行该函数并且名称正确运行 - 如果名称在数据库中,则如果没有则正确回显,那么它也正确地回声。我想要做的是将表单帖子的值传递给函数,以便它检查它是否存在于数据库中。这是我的代码:
该函数检查列数是否为1。
function user_exists($pdo, $username) {
$stmt = $pdo->prepare('SELECT COUNT(uid) FROM users WHERE username = :username');
$stmt->execute(['username' => $username]);
$result = $stmt->fetchColumn();
return ($result == 1);
}
如果管理员用户存在于数据库中,则“存在” - 仅用于测试。
if(user_exists($pdo,'admin') == true) {
echo "exists";
} else {
echo "doesnt exist";
}
检查两个字段是否已输入然后我希望它检查输入的用户名是否在数据库中,但我做错了。
if(!empty($_POST) === true) {
$username = $_POST['username'];
$pwood = $_POST['password'];
if(empty($username) === true || empty($pwood) === true) {
echo "You need to enter a username and password";
} else if (user_exists($pdo,$_POST['username']) == false){
echo 'We can\'t find that username. Please try again or register';
}
}
答案 0 :(得分:2)
最好不要与bool值进行比较,只需使用
即可//...see below
require_once('UserRepository.php');
$ur = new UserRepostory($pdo);
if(!empty($_POST)) {
if (empty($username) || empty($pwood)) {
// something
} else if (!$ur->exists($_POST['username'])) { // your user_exists($pdo, $username) works fine, too
// something else
}
}
特别是初始if(!empty($_POST) === true) {
难以阅读并导致错误导致误解操作员优先权。
更新,以下是一个类的示例:
// UserRepository.php
class UserRepository {
private $pdo;
// '\PDO' instead of 'PDO', see PHP Namespacing
public function __construct (\PDO $pdo)
{
$this->pdo = $pdo;
}
public function exists($username)
{
$sql = 'SELECT COUNT(uid) FROM users WHERE username = :username');
$stmt = $this->pdo->prepare($sql);
$stmt->execute(['username' => $username]);
$result = $stmt->fetchColumn();
return (bool) $result;
}
}