如何检索登录php的哈希密码

如何检索登录php的哈希密码,php,sql,database,Php,Sql,Database,我正在尝试建立我的第一个登录系统,我是一个初学者 我想从数据库中检索密码,并使用此代码检查登录 if (password_verify($password, $hash)) { echo 'Password is valid!'; } 数据库中的密码是使用 $hash = password_hash($_POST['password'], PASSWORD_DEFAULT)."\n"; 我知道我应该使用sql SELECT password FROM $tbl_name WHERE

我正在尝试建立我的第一个登录系统,我是一个初学者

我想从数据库中检索密码,并使用此代码检查登录

if (password_verify($password, $hash)) {
    echo 'Password is valid!';
}
数据库中的密码是使用

$hash = password_hash($_POST['password'], PASSWORD_DEFAULT)."\n";
我知道我应该使用sql

SELECT password FROM $tbl_name WHERE email='$email'

如何将$hash连接到我的sql?

好的,基本上解释一下密码验证是如何工作的:

第一个参数是用户输入的非散列密码。第二个参数是从数据库中提取的哈希密码

下面是我用于数据库提取的结构。它是面向对象的,使用正确的编码约定,在学习“过程式”PHP之前,您应该尝试并学习这些约定,因为这是更好的编码方式

class DatabaseConnect{

    protected
        $host, $user, $pass, $dbname, $con;

    public function __construct(){

        // Replace these with your database information. dbname is the name of the actual database, not the table.

        $this->host = "localhost";
        $this->user = "root";
        $this->pass = "";
        $this->dbname = "test";
    }

    public function dbConnect(){
        try{
            $this->con = new PDO("mysql:host=$this->host;dbname=$this->dbname", $this->user, $this->pass);
            $this->con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }catch(Exception $ex){
            echo $ex->getMessage();
        }
    }

    public function dbDisconnect(){
        $this->con = null;
    }
}

class Database extends DatabaseConnect{

    public function __construct(){
        parent::__construct();
    }

    public function getPassword($username){

        $sql = "SELECT password FROM users WHERE username = ?;";

        $this->dbConnect();

        $stmt = $this->con->prepare($sql);
        $stmt->bindParam(1, $username); // This is the username that was passed to the method
        $stmt->execute();
        $stmt->setFetchMode(PDO::FETCH_ASSOC);

        $results = $stmt->fetchAll();

        $this->dbDisconnect();

        return $results[0]["password"];
    }
}

// This is the code that uses the above classes. The classes can be kept in a separate file (and should be).
$database = new Database();
$passFromDatabase = $database->getPassword("pseud");
$passFromInput = $_POST["password"];

if(password_verify($passFromInput, $passFromDatabase)){
    echo "Passwords match";
}
第一个类包含连接到数据库的信息/方法。第二个类使用给定的用户名从数据库获取密码,它扩展了第一个类

然后,在类下面,我们使用它们从数据库中获取数据

通常,在StackOverflow上,人们会拒绝做这种事情(给你一个完整的答案,你可以很好地研究一下),但我更愿意实际帮助你:p。下次,请注意,大多数人会拒绝帮助你


希望我能帮上忙。

您可能应该先连接数据库,然后尝试匹配哈希 从下面的链接连接数据库教程


您不能在MySQL查询中直接使用
password\u verify


您需要做的是通过电子邮件从数据库中查询记录,然后使用password\u verify()将从数据库返回的密码散列与输入密码进行比较

按照简单的步骤验证用户。
1.运行数据库查询以通过电子邮件获取用户以获取哈希密码。
2.使用密码\u验证()验证此哈希密码


我们不能在MySQL查询中直接使用密码验证()的原因是密码哈希()每次执行密码哈希()函数时都会生成唯一/不同的密码


您是在问如何将哈希存储到mysql表中,还是想知道如何将给定的哈希与mysql表中的哈希进行对比?我想知道如何从数据库中检索哈希密码并将其“填充”到变量$password对不起,我的帖子一定很模糊。我想知道如何从数据库中检索密码并将其填入变量$passwordOne片刻之后,将提供完整答案,希望对您有所帮助。请添加代码主体,因为链接会在一段时间后过期。