2014-10-07 182 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