为什么mysqli num行没有返回任何内容?

时间:2015-02-14 17:03:08

标签: php mysql database mysqli

我有一些代码可以验证登录的用户名和密码(不要对我大喊大叫,我已经使用GUMP清理了代码中的字符串):

$verif_query="SELECT * FROM users WHERE username = \"".$_POST['user']."\" AND password = \"".hash("sha512",$_POST['passwd'].mysqli_fetch_assoc(mysqli_query($DB,"SELECT salt FROM users WHERE username = \"".$_POST['user']."\"")))."\"";
$userpass_verif = mysqli_query($DB,$verif_query);

if(mysqli_num_rows($userpass_verif) <= 0){
  die("Invalid un/pass");
}

更新:我忘了提及,我回复了$ verif_query并针对phpmyadmin运行它,它返回了1行。对不起,我的问题并不全面。

UPDATE2:我在输入问题时搞砸了代码示例。我确实验证了数据库连接,我确实在查询中包含了$ DB。再次,抱歉这个坏问题。

2 个答案:

答案 0 :(得分:1)

当你这样做时:

mysqli_fetch_assoc(
    mysqli_query(
        "SELECT salt FROM users WHERE "
        . "username = \"" . $_POST['user'] . "\""
    )
)

您实际上是获取关联数组,而不是用户的盐作为字符串。如果用户的盐是“盐”,这就是你将得到的:

Array
(
    [salt] => the-salt
)

当连接用户密码(例如'the-password')和该数组时,您将获得:

the-passwordArray

由于用于验证的密码哈希将由该字符串构成,查询将(很可能)不匹配任何内容,并且您将不会从验证查询返回任何行。

答案 1 :(得分:0)

在die()之前使用它并告诉我们你得到的错误

echo mysqli_errno($this->db_link);