无法使用$ this调用数据库连接

时间:2016-04-11 15:58:49

标签: php mysqli

每当我试图在$this->dbc中致电Is_Staff时,都会返回错误消息:

Fatal error: Using $this when not in object context

而且我不太清楚为什么会这样做。 我尝试过将$ dbc全局化,但这似乎没有做任何事情。

Class BoardDatabase {

            public $dbhost = "localhost"; // Host
            public $dbuser = "root"; // Username
            public $dbpass = ""; // Password
            public $dbname = "NecBoard"; // Database

            public function __construct($dbhost, $dbuser, $dbpass, $dbname) {

                $this->dbc = new mysqli($this->dbhost, $this->dbuser, $this->dbpass, $this->dbname) or die("Couldnt connect to the database! " . mysqli_errno);
                if(!$this->dbc) {
                    die("Could not connect to database: " . $this->dbc->connect_errno());
                }
            }

            public static function Is_Staff($type, $bool) {

                if($type == "mod") {
                    if($bool == true) {

                        $IsStaff = $this->dbc->prepare("SELECT is_mod FROM users WHERE id = ?");
                        $IsStaff->bind_param("s", $_SESSION["id"]);
                        $IsStaff->execute();
                        $IsStaff->bind_result($is_mod);

                        $IsStaff->store_result();
                        if($IsStaff->num_rows >= 1) {

                            $IsStaff->fetch();
                            if($is_mod >= 1) {
                                return true;
                            } else {
                                return false;
                            }

                        }

                    } else {
                        return false;
                    }
                }

            }

        }

1 个答案:

答案 0 :(得分:2)

<强>问题

首先,当$dbc变量甚至不是对象本身的属性时,您将访问BoardDatabase变量作为对象$this的上下文。

其次,您无法在静态上下文中使用$dbc访问变量。

<强>解决方案

将顶部的变量public static $dbc; 声明为静态变量:

self::$dbc

并在对象上下文中以这种方式访问​​它:

type beantype =
    | Bool
    | Int
    | TLr of fieldsrec
    | TId of ident
and fieldsrec = { fields : field list }
and field =
    | FIe of (ident * beantype) 

这可以解决您的问题。