2014-10-07 131 views
0

outisde匿名函数,我创建了一个匿名函数来得到一些SQL的结果,所以我没有把它写每次:返回PDO结果从里面

function select($sql){ 
    global $connexion; // config connection 
    $query = $connexion->prepare($sql); 
    $query->execute(); 
    return $query->setFetchMode(PDO::FETCH_OBJ); 
} 

我创建了一个类来获得从我的DB元信息:

class PageInfo { 
    public function get_meta($page_name){ 
      $sql = "SELECT description, keywords FROM pages WHERE titre='$page_name'"; 
      select($sql); //call the first function 
      global $query; 
      while($results = $query->fetch()){ 
       echo "test"; 
      } 
    } 
} 

然后我调用类的这样的:

$PageInfo = new PageInfo(); 
$PageInfo->get_meta('homepage'); 

不要UND erstant为什么我得到这个致命的错误:

Fatal error: Call to a member function fetch() on a non-object 

感谢您的宝贵帮助

+0

这使我的眼睛受伤。如果你打算在任何地方使用全局,你可能只需通过静态函数或单例访问你的数据库。至少这将是可读的 – Steve 2014-10-07 14:17:42

回答

2

你从来没有global $queryselect()函数中。这意味着$query中存在一个局部变量,并且一旦函数返回,您的数据库结果将被丢弃/销毁。

另外,使用全局变量是非常可怕的。特别是对此。在任何给定时间,您都将自己限制为在航班上查询SINGLE。为什么不返回实际结果呢?

function query($sql) { 
    $result = $connextion->execute($sql); 
    return $result; 
} 

$results = query($sql); 
while($row = $results->fetch()) { 
    ... 
} 
+0

真的!很多... – raphaman 2014-10-07 14:22:27