Php 使用prepared语句检索$row参数的登录测试信息

Php 使用prepared语句检索$row参数的登录测试信息,php,mysqli,prepared-statement,Php,Mysqli,Prepared Statement,我设法达到了我想要的结果。在再次浏览PHP手册网站之后。就我个人而言,我认为这个网站让像我这样试图学习的人感到困惑 代码(工作): 我不知道这是否会对您有所帮助,但我使用PDO做了一些非常类似的事情,但应该是一样的。我让一个用户输入他们的用户名和密码,我使用他们的用户名从数据库中获取他们的用户salt 对我来说,我预先将salt添加到用户提供的密码中,然后将其散列。然后检查用户提供的密码以及salt和hash是否与数据库中的密码匹配,并返回true或false //Select users ro

我设法达到了我想要的结果。在再次浏览PHP手册网站之后。就我个人而言,我认为这个网站让像我这样试图学习的人感到困惑

代码(工作):


我不知道这是否会对您有所帮助,但我使用PDO做了一些非常类似的事情,但应该是一样的。我让一个用户输入他们的用户名和密码,我使用他们的用户名从数据库中获取他们的用户salt

对我来说,我预先将salt添加到用户提供的密码中,然后将其散列。然后检查用户提供的密码以及salt和hash是否与数据库中的密码匹配,并返回true或false

//Select users row from database base on $email
$sql = 'SELECT * FROM users WHERE username = :userfield OR email = :userfield LIMIT 1';

$array = array(':userfield' => $_POST['myusername']);

$sth = $this->prepare($sql);

foreach ($array as $key => $value) {
    $sth->bindValue("$key", $value);
}

$sth->execute();

$selection = $sth->fetchAll(PDO::FETCH_ASSOC);

//Salt and hash password for checking
$password = $selection[0]['user_salt'] . $_POST['mypassword'];
//hash the password
$password = $this->hashData($password);
// if there is a match return true otherwise return false
$match = ($password != $selection[0]['password'] ? false : true);

我已经阅读php手册一段时间了。我已经阅读并关注了从谷歌搜索中发现的其他堆栈溢出帖子。我还是没能找到解决办法。另外,它不是随机的代码行,我让它与普通的mysql语句完美配合。从查询中获取盐或密码没有什么特别之处——它们的检索方式与任何其他数据完全相同——就像所示的任何示例一样。这是一组随机的行,它们之间没有特别的意义和联系。这与我要回去的盐/密码无关。我提到他们是为了提供完整的背景,并解释我想做什么。显然你不想帮忙,在这种情况下请不要评论。@Corey,当你的代码中出现IF语句时,它到底发生了什么?@你的常识。请不要在这里继续回复。这个人很有礼貌地尽力帮助我。你所做的一切,如果你提出指控,发表无益的评论。我不期望或要求“在金盘子上提供工作代码”,解释我如何解决我的问题就好了。@Corey正如我之前告诉过你的,你需要的所有“解释”都是一个教程。不先学习就尝试使用新的API是一条没有出路的路。它将生成一个您正在使用的修复程序,或类似于此答案的代码。@YourCommonSense,这是从我的类中的一个函数中删除的,它允许添加多个键/值。在这种情况下,仅使用1个键/值,但如果需要,他可以添加更多。事实上,他可以有10个,这将节省10个值(重复代码),这是一个很弱的发布借口。更不用说PDO根本不需要显式循环。好吧,让我们看看你的例子,而不是不断地批评任何人提出的每个问题。我从你对任何问题的评论中看到的都是批评,没有答案
//Select users row from database base on $email
$sql = 'SELECT * FROM users WHERE username = :userfield OR email = :userfield LIMIT 1';

$array = array(':userfield' => $_POST['myusername']);

$sth = $this->prepare($sql);

foreach ($array as $key => $value) {
    $sth->bindValue("$key", $value);
}

$sth->execute();

$selection = $sth->fetchAll(PDO::FETCH_ASSOC);

//Salt and hash password for checking
$password = $selection[0]['user_salt'] . $_POST['mypassword'];
//hash the password
$password = $this->hashData($password);
// if there is a match return true otherwise return false
$match = ($password != $selection[0]['password'] ? false : true);