【问题标题】:Mysqli: Fatal error: Call to a member function prepare() on null [duplicate]Mysqli:致命错误:在 null 上调用成员函数 prepare() [重复]
【发布时间】:2015-09-26 18:31:31
【问题描述】:

我正在尝试将登录功能转换为具有某些功能的类,在我将其转换为类之前它一直在工作,这是我的代码:

class merwaa_login {
public $conn;
public function __construct($conn) {
    $this->conn = $conn;
    if(isset($_POST['login-submit'])) {
    $username = merwaa_clean($_POST['username']);
    $password = merwaa_clean($_POST['password']);
    $sql = $conn->prepare("SELECT * FROM users WHERE username = ? OR email = ?;");
    $sql->bind_param('ss', $username, $username);
    $sql->execute();
    $all = $sql->get_result();
    $all = $all->fetch_assoc();
    if (count($all) === 0){
        echo 'البيانات المدخلة خاطئة!';
    }
    else{
        $hashed_pwd = $all['password'];
        if (password_verify($password,$hashed_pwd)) {
            echo 'كفو';
            $_SESSION['username'] = $username = $all['username'];
            if(isset($POST['rememberme'])) {
                $uid = $all['ID'];
                merwaa_set_jwt($username,$uid);
            }

        } else{
            echo 'خطأ';
        }
    }
}
}
}

我可能有一些语法错误,请通知我。

【问题讨论】:

    标签: php authentication mysqli


    【解决方案1】:

    改变这个:-

    $sql = $conn->prepare("SELECT * FROM users WHERE username = ? OR email = ?;");
    

    对此:-

    $sql = $this->conn->prepare("SELECT * FROM users WHERE username = ? OR email = ?;");
    

    或者,您可以将public $conn 更改为global $conn。那么您就不需要进行上述更改了。

    【讨论】:

    • 我试着把public改成global,上面写着Parse error: syntax error, unexpected 'global' (T_GLOBAL), expecting function (T_FUNCTION) in,有什么区别?
    • 当我使用第一个解决方案时,我得到了 sme Fatal error: Call to a member function prepare() on null
    • 你的类文件中是否包含了 db 连接文件?
    • 哇!我现在把它包括在内,你喜欢它!谢谢!
    【解决方案2】:

    尝试使用$this->conn->prepare 而不是$conn->prepare 并且应该将适当的连接对象传递给构造函数

    【讨论】:

    • 同一个Fatal error: Call to a member function prepare() on null
    • 你需要传递一个合适的连接对象$conn。比如 $marwa = new merwaa_login($conn) 其中 $conn 是之前设置的连接对象
    • 我做了$login = new merwaa_login($conn);
    • 但现在它被爱了!谢谢!
    猜你喜欢
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 2015-09-14
    相关资源
    最近更新 更多