PHP:找不到$ mysqli

时间:2014-12-17 13:10:21

标签: php database mysqli

我可能做了一件非常愚蠢的事情,但这就是这笔交易。 我创建了一个名为Database的类,它非常简单,只能容纳2个函数。只是为了打开和关闭mysqli连接。

<?php

error_reporting(E_ALL);

require_once("sdl_config.php");

class Database {
/* Open the connection with the database */
    public function OpenConnection() {
        $mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

        if($mysqli->connect_error) {
            die('Connection Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error );
        } else {
            echo 'Connection Succeeded';
        }
    }

/* Close the connection with the database */
    public function CloseConnection() { 
        if($mysqli) {
            $mysqli->close();
            echo 'Connection Closed';
        } else {
            echo 'Connection does not exist';
        }
    }
}

为了测试这个,我创建了另一个页面,只调用了2个函数。

<?php
require_once("include/class.database.php");

Database::OpenConnection();
Database::CloseConnection();

打开连接完美无缺,但问题出现在CloseConnection函数中。它永远不会找到$ mysqli变量,当我之前打开它时,这怎么可能?

另外,我已经读到有些人说手动关闭连接有点过时了,其他人说这样做是最好的。那么这里最好的做法是什么,什么时候应该关闭连接呢?

提前谢谢。

1 个答案:

答案 0 :(得分:3)

函数中定义的变量是局部的,仅在该函数本身内可见。

你应该使用OOP允许我们做的事情,并使该变量成为一个类'property:

class Database {
    private $mysqli;
/* Open the connection with the database */
    public function OpenConnection() {
        $this->mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

        if($this->mysqli->connect_error) {
            die('Connection Error (' . $this->mysqli->connect_errno . ') ' . $this->mysqli->connect_error );
        } else {
            echo 'Connection Succeeded';
        }
    }

/* Close the connection with the database */
    public function CloseConnection() { 
        if($this->mysqli) {
            $this->mysqli->close();
            echo 'Connection Closed';
        } else {
            echo 'Connection does not exist';
        }
    }
}

但你现在需要使用类的对象:

<?php
require_once("include/class.database.php");

$db = new Database;
$db->OpenConnection();
$db->CloseConnection();

参考: