PHP未定义变量mysqli连接

4

我有一个MySQL连接,它被包含在一个单独的文件中:

require 'settings.php';

我有一个包含所有函数的文件,也已经包含在内:

require 'functions.php';

在设置中,它看起来像这样:

$db = mysqli_connect("host", "username", "passwort", "database");
    if(!$db) {
        exit("Error: ".mysqli_connect_error());
    }

一个函数使用这个连接,代码如下:

function includehomepage() {
            $data = array();
            $query = "SELECT pagecontent FROM `pages` WHERE `id` = `0`";
            $query = mysqli_query($db, $query);
            $data = mysqli_fetch_assoc($query);
            return $data['pagecontent'];
        }

但是我收到了以下的错误信息:
Undefined variable: db in /var/... on line 18

你有答案吗?变量必须在包含的文件中定义。我很困惑。感谢您的回答!


在一个函数中,除非您将其作为参数传递或声明为全局变量,否则没有$db变量。 - u_mulder
2个回答

4
变量作用域问题。请查看global
function includehomepage() {
   global $db;
   $data = array();
   $query = "SELECT pagecontent FROM `pages` WHERE `id` = '0'";
   $query = mysqli_query($db, $query);
   $data = mysqli_fetch_assoc($query);
   return $data['pagecontent'];
}

谢谢!现在只有一个错误:警告:mysqli_fetch_assoc()期望参数1为mysqli_result,但实际传递了布尔值... - fredkid
修改后的答案。不要在“<backtick>”中引用0。它会认为0是列名,并终止查询。请使用单引号或双引号引用字符串。[Err] 1054 - 在where子句中未知的列'0'。 - ʰᵈˑ
不客气 @fredkid。这个网站的工作方式是在问题得到成功回答后接受一个答案,"关闭"你的问题并告知其他人哪个答案对你最有效。这里的两个答案都是正确的,请接受其中任意一个。 :) - ʰᵈˑ
请避免使用全局变量。请改用function includehomepage($db) {...} - maxhb

2

$db是一个全局变量,用于includehomepage函数。如果想要访问它,需要将其传递给该函数或在函数内声明为全局变量。

例如:

function includehomepage() {
     global $db;   
     $data = array();
     $query = "SELECT pagecontent FROM `pages` WHERE `id` = '0'";
     $query = mysqli_query($db, $query);
     $data = mysqli_fetch_assoc($query);
     return $data['pagecontent'];
}

或者将它作为函数的参数,在调用时传递。
function includehomepage($db) {
     $data = array();
     $query = "SELECT pagecontent FROM `pages` WHERE `id` = '0'";
     $query = mysqli_query($db, $query);
     $data = mysqli_fetch_assoc($query);
     return $data['pagecontent'];
}
includehomepage($db);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接