简体   繁体   English

PDO 登录系统行数总是返回 null

[英]PDO login system rowcount ALWAYS returning null

so my PHP & PDO login is returning 0 every time, even if the info is correct.所以我的 PHP 和 PDO 登录每次都返回 0,即使信息是正确的。 The register page works fine, no errors in that.注册页面工作正常,没有错误。 But as soon as I try to login, it seems that $Count = $stmt->rowCount();但是一旦我尝试登录,似乎$Count = $stmt->rowCount(); is returning null every time.每次都返回 null 。 I tried echoing $Count to see what the value was returning, and even if the information was 100% correct it still returned zero.我尝试回显 $Count 以查看返回的值,即使信息 100% 正确,它仍然返回零。 Any help?有什么帮助吗? Here's my code.这是我的代码。

public function userLogin($email, $password)
  {

        try {
              $dbConnection = $this->DBConnect();
              $stmt = $dbConnection->prepare('SELECT * FROM `users` WHERE `email` = :email and `password` = :password');
              $hash_password = hash('sha256', $password);
              $stmt->bindParam(":email", $email, PDO::PARAM_STR);
              $stmt->bindParam(":password", $hash_password, PDO::PARAM_STR);
              $stmt->execute();

              $Count = $stmt->rowCount();
              $data = $stmt->fetch(PDO::FETCH_OBJ);
              if ($Count == 1) {
                    session_start();
                    $_SESSION['uid'] = $data->UID;
                    $_SESSION['username'] = $data->username;
                    $_SESSION['firstname'] = $data->firstname;
                    $_SESSION['lastname'] = $data->lastname;
                    $_SESSION['ip_address'] = $data->ip_address;
                    header('Location: /panel/index?success');
                    $dbConnection = null;
                    return true;
              } else {
                    header('Location: /panel/login?error');
                    $dbConnection = null;
                    return false;
              }
        } catch (PDOException $e) {
              echo 'Connection failed: ' . $e->getMessage();
        }
  }

you better put that to use: password_hash() and password_verify()你最好把它使用:password_hash() 和 password_verify()

$dbConnection = $this->DBConnect();
$stmt = $dbConnection->prepare('SELECT * FROM `users` WHERE `email` = :email AND password != ""');
$stmt->bindParam(":email", $email, PDO::PARAM_STR);
$stmt->execute();
if($data = $stmt->fetch(PDO::FETCH_OBJ)) {
    if(password_verify($password, $data->password) === TRUE) {
    
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM