PHP:无法使用fetch_row登录

时间:2015-09-15 07:17:35

标签: php database mysqli

我正在关注phpacademy教程。以下是登录的代码,但这不起作用。请帮我修好

的login.php

$login= login($username, $password);
        if($login===FALSE){
            $errors[]='Username/Password is not correct';
        }
        else{
            echo 'Welcome Back!';
        }

users.php

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;


    }

此代码始终会生成Username/ Password is not correct。有人可以帮我解决它的错误吗?

1 个答案:

答案 0 :(得分:3)

这个phpacademy教程很糟糕,由一些不称职的菜鸟写的。 两次查询数据库足以告诉,更不用说其他错误了。您应该立即退出并找到一些可靠的源。

这里是你的功能,但使用 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'];
    }
}

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

相关问题