📌  相关文章
📜  警告:password_verify() 期望参数 2 为字符串,数组在 - PHP 中给出(1)

📅  最后修改于: 2023-12-03 15:27:56.983000             🧑  作者: Mango

警告:password_verify() 期望参数 2 为字符串,数组在 PHP 中给出

在使用PHP中的password_verify()函数进行密码验证时,可能会遇到这样的警告提示:'password_verify() 期望参数 2 为字符串,数组在 PHP 中给出'。这意味着你在调用password_verify()函数时,第二个参数必须是字符串类型,而不是数组类型。

问题原因

password_verify()函数用于验证密码是否与哈希值匹配。它需要两个参数:要验证的密码和被哈希的密码。如果被哈希的密码是从数据库中取出,那么它很可能是一个数组类型,因为数据库查询结果通常会返回一个数组。

但是password_verify()函数要求第二个参数必须是字符串类型,因为它需要将被哈希的密码解析成字符串,以便进行比较。如果将数组传递给password_verify()函数,它会抛出一个警告,提示你需要将数组转换成字符串类型。

解决方法

要解决这个问题,你需要将数组转换成字符串类型。你可以使用implode()函数将数组中的元素组合成一个字符串,然后将这个字符串作为password_verify()函数的第二个参数传递。

以下是一个示例代码:

$password = 'mypassword';
$hash = '$2y$10$VGVjaFRlc3RpbmdAbWlzcHRvcmVhY2NvdW50LmNvbQ==$CTTX6w5e1xg/SC71zWQYNlF5XCf.L1a';

// 从数据库中取出的哈希值可能是数组类型
$hashed_password = array($hash);

// 将数组转换成字符串类型
$hashed_password = implode($hashed_password);

if (password_verify($password, $hashed_password)) {
    echo '密码匹配!';
} else {
    echo '密码不匹配!';
}

在以上代码中,我们将$hash变量赋值给了$hashed_password变量,后者是一个数组类型。接下来,我们使用implode()函数将$hashed_password数组转换成了一个字符串类型。

最后,我们调用password_verify()函数,将密码和被哈希的密码(即字符串类型的$hashed_password变量)传递给它,并判断密码是否匹配。

总结

在使用password_verify()函数时,如果遇到'password_verify() 期望参数 2 为字符串,数组在 PHP 中给出'的警告提示,你需要将传递给password_verify()函数的第二个参数转换成字符串类型。你可以使用implode()或其他字符串操作函数来完成这个转换。