无法使用SQLi在PHP中检索行

时间:2015-11-05 14:57:07

标签: php mysqli

<?php
require 'core.inc.php';
require 'connect.inc.php';
//print($current_file);
if(isset($_POST['username']) && isset($_POST['password'])){
    $username = $_POST['username'];
    $password = $_POST['password'];
    $password_hash = md5($password);

    if(!empty($username) && !empty($password)){

        $query = "SELECT `id` FROM `users` WHERE `username`='$username' AND `password`='$password_hash'";

        if($query_run = mysqli_query($conn,$query)){
            $query_num_rows = mysqli_num_rows($query_run);

            if($query_num_rows == 0){
                print("Invalid username or password");
            }
            else if($query_num_rows == 1){
                print("Found!");
            }
        }
    }
    else{
        print("Enter username/password");
    }
}   

&GT;

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
     <form action="<?php $current_file ?>" method="POST">
        Username
        <input type="text" name="username">
        Password
        <input type="text" name="password">
        <input type="submit" value="Log in">
    </form>
</body>
</html>

您好我想问这个,因为我是PHP的新手。由于我在字段中输入了正确的用户名和密码,因此我似乎无法获得“FOUND IT”的预期和期望输出。即使我正确输入它,它给我“无效的用户名和密码。”输出。谢谢!

2 个答案:

答案 0 :(得分:0)

也许您的问题是数据库中的密码字段不是哈希值。尝试在查询中发送$ password变量而不是$ password_hash,如果有效,那就是问题。

答案 1 :(得分:0)

调试此方法的最简单方法是打印出sql查询。

$query = "SELECT `id` FROM `users` WHERE `username`='$username' AND `password`='$password_hash'";
var_dump($query);

然后,您可以查看正在生成的sql,甚至可以自己在数据库上运行它。可能是用户不存在或用户数据不同。

在你进一步了解之前,请先了解准备好的陈述。你不应该直接将用户输入放入mysql查询中。

这里有一些关于sql注入的轻松阅读。 http://php.net/manual/en/security.database.sql-injection.php