2013-10-25 15 views
-2

我知道這已經被問過,但我所有的答案我經歷了沒有真的有幫助。 所以這應該輸出一個話題的內容,但是它告訴我致命錯誤:調用函數fetch()獲取非線對象上的非對象/var/www/article.php上線77

Notice: Undefined variable: articles in /var/www/article.php on line 77

Fatal error: Call to a member function fetch() on a non-object in /var/www/article.php on line 77

 if(isset($_GET['id'])){ 
     $setid = $_GET['id'];  
     $articles = $dbh->prepare('SELECT * FROM front_articles WHERE article_id=:article_id'); 
     $articles->bindParam(':article_id', $setid, PDO::PARAM_INT); 
     $articles->execute(); 
}  
     while($article = $articles->fetch(PDO::FETCH_OBJ)) { 
     echo $article->article_content; 
} 

編輯:事情是,我有一個用戶統計相同的代碼,它工作得很好

 <?php 
     if(isset($_GET['id'])){ 
     $setid = $_GET['id'];  
     $user_stats = $dbh->prepare('SELECT * FROM users WHERE ID=:ID'); 
     $user_stats->bindParam(':ID', $setid, PDO::PARAM_INT); 
     $user_stats->execute(); 
     } 
    while($stats = $user_stats->fetch(PDO::FETCH_OBJ)){ 
    ?> 
    <div id="stats"> 
    <?php 
    echo 'Username: '.$stats->username.'<br>'. 
      'e-mail: '.$stats->email.'<br>'. 
      'Posts: '.$stats->post_count.'<br>'. 
      'Member Since: '.$stats->created.'<br>'. 
      'Age: '.$stats->age.'<br>'. 
      'Location: '.$stats->location.'<br>'. 
      'Name: '.$stats->name.'<br>'; 
    ?> 
    </div> 
<?php 
    } 
?> 
+0

這只是說$文章不是一個對象。它在代碼中沒有被定義過。 –

回答

2

錯誤是告訴你$articles不是一個對象。所以你從來沒有定義它。請注意,您嘗試對其進行定義,但僅限於條件語句內。所以,顯然,條件代碼塊沒有被執行。

簡而言之,if(isset($_GET['id'])){可能正在評估爲false而不執行您的PDO代碼。

目前您的代碼假設$articles將始終有一個值。這意味着以下兩種情況之一是正確的:

  1. 該假設是錯誤的,您應該在嘗試使用它之前檢查$articles是否有值。
  2. 該假設是正確的,並且if條件是不需要的(因爲它應該始終是true)並且可以完全刪除。

這是大概假設是錯誤的情況。

+0

@Kris:顯然兩者有一些區別。如果不在代碼中,那麼在代碼運行的上下文中。 (也就是說,也許當其他代碼運行'$ _GET ['id']'設置)。 – David

+0

我編輯,顯示代碼。 – Kris

+0

@Kris:這兩個代碼塊的執行有什麼區別?他們在同一頁面上,還是在不同的頁面上?在兩個實例中都設置了$ _GET ['id']?每個實例中'$ _GET ['id']'的值是多少? – David

0

文章不是一個對象。當你沒有從數據庫中得到任何結果時,你可以把它放在if語句中。

if(isset($_GET['id'])){ 
     $setid = $_GET['id'];  
     $articles = $dbh->prepare('SELECT * FROM front_articles WHERE article_id=:article_id'); 
     $articles->bindParam(':article_id', $setid, PDO::PARAM_INT); 
     $articles->execute(); 
}  

     if (isset($articles)) { 
     while($article = $articles->fetch(PDO::FETCH_OBJ)) { 
     echo $article->article_content; 
     } else { 
     echo 'No result found. Err: Article is not an object'; 
     } 
} 
相關問題