gpt4 book ai didi

php - mysqli_num_rows = 0,而它应该是 1

转载 作者:行者123 更新时间:2023-11-29 14:12:20 26 4
gpt4 key购买 nike

我一直在尝试自己解决这个问题,但我终其一生都无法解决它..

//If they are, retreive them from the Person table    
var_dump($_POST['username']);
var_dump($_POST['password']);
$select = $this-> doQuery("SELECT * FROM Person WHERE username = '{$_POST['username']}' AND password = '".md5($_POST['password'])."'");
var_dump($select);

try {
if (mysqli_num_rows($select) > 0){
var_dump(mysqli_num_rows($select));
//fetching username and password from database
$fetch_array = mysqli_fetch_assoc($select);
var_dump($fetch_array);
//Building a session for the user
$_SESSION['username'] = $fetch_array['username'];

//var_dump($_SESSION['username']);

//Redirecting the user to the index page
header('Location:index.php');
return true;
}

第 4 行和第 5 行的用户名和密码上的两个 var_dump 返回以下内容:

string(8) "johnny03" 
string(9) "password3"
object(mysqli_result)#3 (5) { ["current_field"]=> int(0) ["field_count"]=> int(8) ["lengths"]=> NULL ["num_rows"]=> int(0) ["type"]=> int(0) }

我输入的密码和用户名值都是有效的(它们位于数据库中的正确列下,相信我)。我感觉我的选择查询出了问题,因为 mysqli_num_rows($select) 上的 var 转储没有返回任何内容。话虽这么说,我已经尝试了我能想到的对查询的几乎所有更改它有效,但仍然没有任何结果:[有人可以帮忙吗?

最佳答案

首先:尝试从查询中删除大括号:

$select = $this-> doQuery("SELECT * FROM Person WHERE username = '{$_POST['username']}' AND password = '" . md5($_POST['password']) . "'");

编辑:大括号没问题,请参阅draw010的评论。

如果这不是问题,如draw010所述,请检查生成的哈希值(使用简单的回显将其输出并将其与数据库进行比较。

如果看起来确实匹配,但缺少一个部分,则调整数据库中密码字段的容量。

您的密码字段很可能有一个大小,例如varchar(20) 太小,无法容纳整个哈希。调整数据库中的大小并存储正确的哈希结果

此外,至少要注意一些盐化,md5 已经被破坏了一段时间,因此您应该将其替换为 sha 系列的哈希值。

您还可以使用online md5 hashing来验证数据库中的哈希值。并通过使用 strlen 测量长度来获取长度

关于php - mysqli_num_rows = 0,而它应该是 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13279248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com