2013-01-05 41 views
2

我有一個Database類,它有多個函數來執行查詢。其中之一是其中最簡單的是:查詢函數神祕破解

public function query($query) { 
    return $this->_link->query($query); 
} 

$此 - > _鏈路>查詢工作在其他情況下,所以應該在這裏工作。從具有類的實例的文件中,我這樣做:

function createLineChart() { 

    $query = "select * from tags"; 
    $result = $db->query($query); 

    // do something with result 
} 

createLineChart(); 

但它在$ result行中斷開。查詢也是有效的,我有testid它。我錯過了什麼嗎?

回答

2

你的問題是$db是出了createLineChart()功能的範圍。您可以使用全局法:

function createLineChart() { 
    global $db; // <-- make the db var become available 
    $query = "select * from tags"; 
    $result = $db->query($query); 

    // do something with result 
} 

還是$db對象傳遞給函數作爲參數:

function createLineChart($db) { 

    $query = "select * from tags"; 
    $result = $db->query($query); 

    // do something with result 
} 

createLineChart($db); 

更多信息有關Variable Scope on the Manual

+0

謝謝,這確實是問題所在。 $ db是在函數之外聲明的。 – Veltar

1

如果$db是一個類變量,那麼你需要參考它:

$result = $this->db->query($query); 
+1

我認爲'createLineChart'函數可能在類之外,在這種情況下'$ db'不會被定義。 OP說*從具有一個類的實例的文件* –

+0

這完全不是問題。 'createLineChart()'顯然不是一個對象的方法,而是一個沒有鏈接到任何類的標準用戶定義函數。 – MrCode

2
function createLineChart() { 
    var_dump($db); 
    // this should probably return 'undefined' 
    global $db; 
    // so globalize it! 
    $query = "select * from tags"; 
    $result = $db->query($query); 
    // do something with result 
}