全局变量,无法关闭连接

时间:2014-01-02 14:07:42

标签: php mysqli global-variables database-connection

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 "

我很困惑。

4 个答案:

答案 0 :(得分:0)

您需要使用功能中的global关键字

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

然后使用它:

$link = linkDb();
unlinkDb();

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

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

答案 1 :(得分:0)

使用函数定义:

function linkDb(&$link) {...}
function unlinkDb(&$link) {...}

答案 2 :(得分:0)

如果你喜欢在你的类中保持连接(我假设我在看一个类)你可以将它定义为一个变量并从实例化对象中引用它; 这样,您可以通过调用$ 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);
}

答案 3 :(得分:0)

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

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

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

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

$link = linkDb(); 

并在同一个文件中调用一个以这种方式关闭DB的函数:

unlinkDb($link); 

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