Php 全局变量,无法关闭连接
上面的代码文件包含在第二个文件的顶部,我正在尝试关闭数据库连接Php 全局变量,无法关闭连接,php,mysqli,global-variables,database-connection,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)
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();
我很困惑。您需要在函数中使用
global
关键字:
"ERROR: Undefined variable: link "
然后按如下方式使用:
function unlinkDb() {
global $link;
mysqli_close($link);
}
尽管更好的解决方案是不使用global
关键字并将$link
作为参数传递给linkDb()
:
在此处使用函数定义:
$link = linkDb();
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);
}
在同一个文件中,通过以下方式调用函数关闭DB:
$link = linkDb();
现在,它的工作方式,我需要。我要感谢所有在这里试图帮助我的人。您需要在您的函数中将$link定义为全局函数,以便在这些函数中赋予它作用域。。。。在外部将其定义为全局是没有意义的,因为它已经是全局的,所以也尝试了这一点,但它不起作用(…也就是说,在每个使用全局
$link
的函数中,必须将其标识为global$link;
不要在更高的范围内这样做,在函数中这样做。更好的是,使用$GLOBALS['link']
更好的是,将$link
作为参数传递给需要它的函数。您的解决方案类似于下面给出的两个答案。@farhanahmed为什么不接受其中一个来结束问题?但我不想要参数化的函数。为什么不呢?这是函数参数的教科书用例。如果您想继续更改在函数中,必须在函数参数之前添加&operator。否则,更改只能用于函数范围。
function linkDb()
{
$link = '';
..............
}
function unlinkDb($link) {
mysqli_close($link);
}
$link = linkDb();
unlinkDb($link);