全局变量,无法关闭连接


global $link;
function linkDb() {
    $hostname = 'xxxxx';
    $username = 'xxxxxx';
    $password = 'xxxxxx';
    $database = 'xxxxxx';
    $link = mysqli_connect($hostname, $username, $password);
    if (!$link) {
        echo ('Error: Could not make a database link using provided credentials');
        die();
            } 
            if (!mysqli_select_db($link, $database)) {
        echo ('Error: Could not connect to database');
        die();
    }   
    return $link;           
}
function unlinkDb() {
    mysqli_close($link);    
}

上面的代码文件包含在第二个文件的顶部,我正在尝试关闭数据库连接,

unlinkDb();

但它的说法

"ERROR: Undefined variable: link "

我很困惑。

您需要在函数中使用 global 关键字:

function unlinkDb() {
    global $link;
    mysqli_close($link);    
}

然后按如下方式使用它:

$link = linkDb();
unlinkDb();

虽然更好的解决方案是不使用 global 关键字并将$link作为参数传递给linkDb()

$link = linkDb();
unlinkDb($link);

使用函数反抗,如下所示:

function linkDb(&$link) {...}
function unlinkDb(&$link) {...}
如果您希望将

连接保留在类中(我假设我正在查看一个类),则可以将其定义为变量并从实例化对象内部引用它;这样,您可以通过调用 $this->linkDb();和/或$this->unlinkDb();

class DBClass {
    private $link;
    function linkDb(){
       $this->link = mysqli_connect($hostname, $username, $password);
    }
    function unlinkDb() {
        mysqli_close($this->link);    
    }
}

你也可以通过函数本身传递它(如前所述),假设你没有在类中工作:

function linkDb(){
    $link = mysqli_connect($hostname, $username, $password);
    // Do fancy stuff
    unlinkDb($link);
}
function unlinkDb($link){
    mysqli_close($link);
}

我对代码进行了修改并将其更改为以下内容:

function linkDb() 
{ 
   $link = ''; 
 .............. 
} 
function unlinkDb($link) { 
   mysqli_close($link); 
} 

在另一个文件中,我正在打开连接,我这样做了:

$link = linkDb(); 

并在同一文件中调用函数以这种方式关闭数据库:

unlinkDb($link); 

现在它以我需要的方式工作。我要感谢在座的所有人,他们试图帮助我。

相关内容

  • 没有找到相关文章

最新更新