phppdo:登录系统

phppdo:登录系统,php,mysql,pdo,Php,Mysql,Pdo,我正在开发一个PHP PDO登录系统,但我一直收到一个错误,可能是我的代码的某些部分不正确 //LOG IN VERIFICATION if (isset($_POST['username'],$_POST['pass'])) { try { $con = new PDO("mysql:host=" . host . ";dbname=" . database, user, auth); $con->setAttribute(PDO::ATTR_EM

我正在开发一个PHP PDO登录系统,但我一直收到一个错误,可能是我的代码的某些部分不正确

//LOG IN VERIFICATION
if (isset($_POST['username'],$_POST['pass'])) {
    try {
        $con = new PDO("mysql:host=" . host . ";dbname=" . database, user, auth);
        $con->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        if (!empty($_POST['username'])&& !empty($_POST['pass'])) {
            //username and password sent from Form
            $usernames = trim($_POST['username']);
            $password = $_POST['pass'];
            $select= $con -> prepare("SELECT username,password FROM users WHERE username='$username' AND password='$password'");
            $select ->execute();
            $results = $select->fetch(PDO::FETCH_ASSOC);

            if (count($results) > 0 && password_verify($password, $results['password'])) {
               header('location:home.php');
            } else{
                header('location:login.php');
            }
        }
    } catch(PDOException $e) {
        echo 'ERROR: ' . $e->getMessage();
    }
}
我怀疑错误在这里

$select= $con -> prepare("SELECT username,password FROM users WHERE username='$username' AND password='$password'");
$select ->execute();
$results = $select->fetch(PDO::FETCH_ASSOC);

因为我验证了与数据库的连接。任何帮助都将不胜感激

您正在分配给
$usernames
,而不是
$username
。然而,真正的问题是
count($results)
——您不能用这种方式计算行数。这意味着,计数将为0,因此执行
else
分支。请参见此处:


编辑:在这种情况下,只需调试代码和
var\u转储(count($results))
,例如。您有一个简单的
if
语句-如果执行了意外的分支,则
if
条件有问题。

执行代码时出现了什么错误???即使条目不在数据库中,我也会继续前往登录页面。您的代码随后失败,您需要找出原因;调试。你有一个明显的打字错误。检查错误会告诉您这一点。另外,由于您是PDO,所以应该使用准备好的语句。您将受到严重的SQL注入的影响谢谢您的帮助和投票。