【发布时间】:2015-05-29 00:32:49
【问题描述】:
几天前我最近开始使用 PDO,并且正在更改我所有的 mysqli 代码,但我似乎遇到了障碍。现在,当我使用 mysqli 时,这段代码运行良好,但现在我似乎无法打印出结果。这段代码基本上取密码的输入值,以及数据库中哈希密码的输入值,匹配它们,如果两者相等,则用户将登录。我的问题是我似乎找不到方法来获取我的数据库中的密码。任何帮助将非常感激。谢谢。
<?php
session_start();
$user = "root";
$pass = "";
$mcon = new PDO('mysql:host=localhost;dbname=rabbit_users', $user, $pass);
try {
$mcon = new PDO('mysql:host=localhost;dbname=rabbit_users', $user, $pass);
$mcon->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
//prepare statement
$password = $_POST['password'];
$stmt = $mcon->prepare("SELECT `password` FROM members WHERE password=:password");
$stmt->bindParam(":password", $_POST['password']);
$stmt->execute();
//get_result
$data_array = $stmt->fetchAll();
$stmt->fetch(PDO::FETCH_ASSOC);
//echo passwords
print 'Password from form: ' . $password . '<br />';
print 'Password from DB: ' . $data_array['password'] . '<br />';
//verify password
if (password_verify($password, $data_array['password'])) {
print 'success';
exit();
}else{
print 'Try again m9';
exit();
}
【问题讨论】:
-
你不需要
$mcon = new PDO('mysql:host=localhost;dbname=rabbit_users', $user, $pass);两次。 -
所以我应该只在 try 语句中保留 Connection 行。再次感谢您的帮助!
-
如果数据库中的密码经过哈希处理...它不会与该 WHERE 语句中帖子中的密码匹配...除非帖子也经过哈希处理?
-
@Soujirou 当我使用 mysqli 时,我也会散列 $_POST 密码,但这就是现在的问题。我不太确定如何去做。感谢您的帮助!
-
@JellalSaleh 使用password_hash