【问题标题】:Mysqli to PDO conversionMysqli 到 PDO 的转换
【发布时间】: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

标签: php mysql pdo mysqli


【解决方案1】:

fetchAll 返回一个包含所有结果集行的数组。因此,如果您使用过$data_array[0]['password'],则可以访问password。 您可能想改用fetch

$data_array = $stmt->fetch(PDO::FETCH_ASSOC);

【讨论】:

  • 非常感谢您的帮助:)。现在我只需要对密码进行哈希处理。我在密码哈希问题上看到的另一种方法是创建 3 个密码(使用算法 obv),然后将这些密码的哈希与实际密码的哈希匹配。但这有点强迫自己哈哈!
猜你喜欢
  • 1970-01-01
  • 2019-12-19
  • 2015-01-25
  • 1970-01-01
  • 2013-08-22
  • 2012-02-26
  • 2021-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多