2013-01-05 42 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 
}