2017-07-19 116 views
-1

好吧,所以我正在为我的个人网站创建一个注册/登录代码。
我没有麻烦做注册表,但我在登录时遇到了一些困难。
这里是我的代码的一部分:如何从MySQL数据库中选择哈希密码

 $stmt = $pdo->prepare("SELECT password FROM members where username = ? "); 
    $stmt->bindValue(1, $username); 
    $stmt->execute(); 

现在我的了解,我需要到第一行从我的表拿去转换为字符串,然后使用password_verify来比较字符串,无论在用户输入我创建的表单。我遇到的问题是它获取一个数组,并且不能真正使用password_verify将字符串与数组进行比较。
我做错了什么?我应该怎么做?
t1;博士我如何从数据库中选择一个哈希密码,将其转换为字符串,然后将该字符串与我的用户输入的密码进行比较。
谢谢。

+1

答案都在手册本;你有没有咨询过他们?编辑:这是一个需要回答“是”或“否”的问题。你注意到了问号吗? –

+0

对不起,如果这之前已经问过,但我搜查,并没有真正找到我的答案,也一直在查找PHP手册近两个小时。你能指出我正确的方向吗? – steve88

+1

['password_verify()'手册...读它!](http://php.net/manual/en/function.password-verify.php) – RiggsFolly

回答

1

该库可在 PHP 5.5+:使用password_hash

$sql = "SELECT * FROM members WHERE username = ?"; 
$stmt = $pdo->prepare($sql); 
$result = $stmt->execute([$_POST['username']]); 
$users = $result->fetchAll(); 
if (isset($users[0]) { 
    if (password_verify($_POST['password'], $users[0]->password) { 
    // valid login 
    } else { 
    // invalid password 
    } 
} else { 
    // invalid username 
}