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

标签 php mysql sql mysqli mysql-num-rows

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

//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/

相关文章:

php - 'SQLSTATE[3D000] : Invalid catalog name: 1046 No database selected' after returning from Laravel password reminder

mysql - MySQL 中的表拆分

SQL 查询检查第一个表中的列或查找第二个表中的行

sql - 在字符串的和处附加一个数值

php 和 mysqli_num_rows 不检测数据库中是否有内容

php - 无法将 phpmailer 脚本用于 gmail

php - 表单数据在第二个 POST 中被覆盖?

Mysql Mariadb 递归查询

mysql - 如何通过php维护已读/未读消息

一些值的 MySQL 自定义输出