2014-09-23 40 views
2

我具有被包含在單獨的文件中的MySQL連接:PHP未定義的變量的mysqli連接

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 

你有答案嗎?變量必須在包含的文件中定義..我很困惑。謝謝你的回答!

+0

在函數中沒有'$ db'變量,除非您將它作爲參數傳遞或聲明爲全局變量。 – 2014-09-23 11:49:56

回答

2

可變範圍問題。看看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']; 
} 
+0

謝謝!現在只有一個錯誤:警告:mysqli_fetch_assoc()期望參數1是mysqli_result,布爾在給定.. – fredkid 2014-09-23 11:51:53

+0

更改的答案。不要在「」中引用0。它會認爲0是一個列名,並殺死查詢。 '[Err] 1054 - 'where clause''中的未知列'0'。在'''或'''引用字符串。 – 2014-09-23 11:53:52

+0

哦,我明白了,非常感謝! – fredkid 2014-09-23 11:55:18

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);