Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:无法使用fetch_行登录_Php_Database_Mysqli - Fatal编程技术网

PHP:无法使用fetch_行登录

PHP:无法使用fetch_行登录,php,database,mysqli,Php,Database,Mysqli,我正在学习我的教程。下面是登录的代码,但这不起作用。请帮我把它修好 login.php $login= login($username, $password); if($login===FALSE){ $errors[]='Username/Password is not correct'; } else{ echo 'Welcome Back!'; } function user_

我正在学习我的教程。下面是登录的代码,但这不起作用。请帮我把它修好

login.php

$login= login($username, $password);
        if($login===FALSE){
            $errors[]='Username/Password is not correct';
        }
        else{
            echo 'Welcome Back!';
        }
function user_id_from_username($username){
        global $connect;
        $username=sanitize($connect,$username);
        $query= "SELECT user_id FROM users WHERE username = '{$username}'";
        $result= mysqli_query($connect, $query);
        if(!$result){
            echo mysqli_error($connect);
        }
        return mysqli_fetch_row($result);
    }

    function login($username, $password){
        global $connect;
        $user_id= user_id_from_username($username);

        $username= sanitize($connect, $username);
        $password= md5($password);

        $query= "SELECT username FROM users WHERE username= '{$username}' and password='{$password}'";

        $result= mysqli_query($connect, $query);
        if(!$result){
            echo mysqli_error($connect);
        }
        return (mysqli_num_rows($result)>0)?$user_id:FALSE;


    }
users.php

$login= login($username, $password);
        if($login===FALSE){
            $errors[]='Username/Password is not correct';
        }
        else{
            echo 'Welcome Back!';
        }
function user_id_from_username($username){
        global $connect;
        $username=sanitize($connect,$username);
        $query= "SELECT user_id FROM users WHERE username = '{$username}'";
        $result= mysqli_query($connect, $query);
        if(!$result){
            echo mysqli_error($connect);
        }
        return mysqli_fetch_row($result);
    }

    function login($username, $password){
        global $connect;
        $user_id= user_id_from_username($username);

        $username= sanitize($connect, $username);
        $password= md5($password);

        $query= "SELECT username FROM users WHERE username= '{$username}' and password='{$password}'";

        $result= mysqli_query($connect, $query);
        if(!$result){
            echo mysqli_error($connect);
        }
        return (mysqli_num_rows($result)>0)?$user_id:FALSE;


    }

此代码总是导致
用户名/密码不正确
。有人能帮我一下吗?

这个PHPACADE我的教程太糟糕了,是由一个不称职的书呆子写的仅查询数据库两次就足以说明,更不用说其他故障了。你应该立即退出,并为自己找到可靠的来源

这里是您的函数,但使用的是PDO,而不是mysqli。由于您不是在编写生产代码,而是在学习,所以API更改对您来说并不是什么大不了的事情,但是如果使用得当,PDO要比mysqli简单得多。通过学习PDO准备的语句,您确实将提高您的技能,而不是通过上述“教程”破坏它们。因此,转到PDO

function login($username, $password){
    global $connect;
    $query = "SELECT user_id, password FROM users WHERE username=?";
    $stmt  = $connect->prepare($query);
    $stmt->execute([$username]);
    if ($row = $stmt->fetch() && $row['password'] == md5($password)) {
        return $row['user_id'];
    }
}

请注意,您应该更改的md5(),相应地更改注册码。

除了想知道为什么要查询数据库两次,为什么要使用MySQLi,但仍然在查询中插入值,而不是准备好的语句/绑定变量,以及为什么要使用md5()作为密码的哈希算法?如果它是有效登录名,则返回$user\u id(
return(mysqli\u num\u rows($result)>0)?$user\u id:FALSE;
),但使用严格类型比较(
If($login==FALSE){
)对布尔值进行测试先生,正如我在问题中提到的,我正在关注phpacademy lecutres,他们有点老了,我只是想改进我的技术,他们使用我上面提到的方法改进你的技术……这仍然不能解释为什么你要两次查询数据库。对于后来的人,只有一个注释,phpacademy不是由“不完整”完成的tent noob’是我在听4年前录制的讲座,他们也有关于PDO的完整系列,事实上我计划在这一系列讲座之后继续学习,