请求数据库后,PHP 7.2密码\u verify()不起作用

请求数据库后,PHP 7.2密码\u verify()不起作用,php,mysql,hash,verify,Php,Mysql,Hash,Verify,我正在测试新的php加密算法(Argon2),当我从数据库收集数据时,它会给我带来问题。我在下面显示代码,password\u verify()总是返回false setpass: function setpass($pass, $cryp){ global $conn; $qry="UPDATE users SET pass=:pass WHERE cryp LIKE :cryp"; $result=$conn->prepare($qry)

我正在测试新的php加密算法(Argon2),当我从数据库收集数据时,它会给我带来问题。我在下面显示代码,
password\u verify()
总是返回false

setpass:

function setpass($pass, $cryp){
        global $conn;
        $qry="UPDATE users SET pass=:pass WHERE cryp LIKE :cryp";
        $result=$conn->prepare($qry);
        $password=password_hash($pass, PASSWORD_ARGON2I);
        $result->bindParam(':pass', $password);
        $result->bindParam(':cryp', $cryp);
        $result->execute();
        header("Location: http://localhost/intranet/login.php");
    }
登录:

function login($nick, $pass){
        global $conn;
        $qry="SELECT id, pass FROM users WHERE nick LIKE :nick";
        $result=$conn->prepare($qry);
        $result->bindParam(':nick', $nick);
        $result->execute();

        $user=$result->fetch();

        if(password_verify($pass, $user['pass'])){
            setcookie("user_id", $user['id'], time()+432000);
            setcookie("user_nick", $user['nick'], time()+432000);
            header("Location: xxxx");
        }
        else{
            var_dump("ERROR");
        }
    }

唯一失败的是
password\u verify
功能。散列很好地插入到数据库中,如果我尝试在同一页上使用测试字符串执行散列和
password\u验证
,它是否工作正常。在数据库和my.php中,编码类似于
utf-8
,我遇到了同样的问题,解决的方法是向密码散列函数添加选项

像这样

    $options = $options = [
        'memory_cost' => PASSWORD_ARGON2_DEFAULT_MEMORY_COST,
        'time_cost'   => PASSWORD_ARGON2_DEFAULT_TIME_COST,
        'threads'     => PASSWORD_ARGON2_DEFAULT_THREADS,
    ];
    $password2 = password_hash('1234567890', PASSWORD_ARGON2I, $options);

在这之后,它工作得很好

您确定选择的是同一行吗
setpass
使用
cryp
列,
login
使用
nick
。我们可以看看一些可以运行的示例代码吗?一个不需要数据库的自给自足的数据库是理想的产生了什么?还要检查
$pass
是否为空请阅读-总结是,这不是向志愿者讲话的理想方式,可能会对获得答案产生反作用。请不要将此添加到您的问题中。是什么促使您将此归咎于特定的PHP版本?这是在别的什么东西上测试的吗?或者使用文本数据库内容和固定密码?(有关DB列定义的详细信息不足。)