prevent error: Call to a member function prepare() on a non-object without global?

prevent error: Call to a member function prepare() on a non-object without global?

我正在尝试使用 PHP 实现对数据库的简单调用。

我收到以下错误 Call to a member function prepare() on a non-object 关于这个问题有很多问题,但对我的回答没有得到很好的解释,尤其是因为我不知道'一直想创建一个新的连接。

注册用户时我有 register.php 里面有标准的 $_GET 数据等,最后调用 insertUser($param ,$param,$param,$param)db_functions.php

public function insertUser($name, $email, $gender, $dob, $password){

        $hash = $this->hashSSHA($password);
        $encryptedPassword = $hash["encrypted"];
        $salt = $hash["salt"];

        $statement = $this ->conn->prepare("INSERT INTO users(name, email, gender, dob, encrypted_password, salt, created_at) VALUES(?,?,?,?,?,?,NOW())");
        $statement->bind_param("ssssss",$name,$email,$gender,$dob,$encryptedPassword,$salt);
        $result = $statement->execute();
        $statement->close();

        if ($result) {
            $statement = $this->conn->prepare("SELECT * FROM users WHERE email =?");
            $statement->bind_param("s", $email);
            $statement->execute();
            $user = $statement->get_result()->fetch_assoc();
            $statement->close();
            return $user;
        }else{
            return false;
        }
    }

看了很多之后,我知道问题是因为 conn 没有在任何地方声明(是的,但是在 class 的顶部作为 private $conn;)

class

中还有一个构造
 function construct(){
    require_once 'db_connect.php';
    $db = new db_connect();
    $this->conn = $db->connect();
}

这只是调用 db_connect & connect()

function connect(){
    require_once 'db_config.php';

    $this -> conn = mysqli_connect(DB_SERVER, DB_USER, DB_PASSWORD, DB_DATABASE);

    return $this -> conn;
}

我以前在 PHP 中管理过数据传输,但那是我在每个 class 中建立连接的时候,没有专门用于功能的 class。

我读到将 $conn 声明为全局变量是一种糟糕的做法,因为它的编码风格很复杂,而且我还看到您可以将连接作为变量传递,但是我不明白我该怎么做从 register.php 到 db_functions 当构造在 db_functions

内时

如果有人可以提供好的 tutorials/explanations 或者我如何解决这个问题,我们将不胜感激。

如果您的构造方法前面没有 __,您的构造方法将无法作为 'magic method' 使用。

改变;

 function construct(){
    require_once 'db_connect.php';
    $db = new db_connect();
    $this->conn = $db->connect();
}

至;

 function __construct(){
    require_once 'db_connect.php';
    $db = new db_connect();
    $this->conn = $db->connect();
}

Documentation for magic methods can be found here

Documentation for constructors can be found here