致命错误:在第77行的/var/www/article.php中调用非对象的成员函数fetch()

时间:2013-10-25 14:29:13

标签: php mysql pdo

我知道之前有人问过,但我所经历的所有答案并没有真正帮助。 所以这应该输出一个主题的内容,但它告诉我

  

注意:未定义的变量:/var/www/article.php中的文章在线   77

     

致命错误:在非对象中调用成员函数fetch()   第77行/var/www/article.php

        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   
    }
?>

2 个答案:

答案 0 :(得分:2)

错误告诉您$articles不是对象。所以你从未定义过它。请注意,您尝试定义它,但仅限于条件语句。所以,显然,条件代码块没有被执行。

简而言之,if(isset($_GET['id'])){可能正在评估false而不执行您的PDO代码。

目前,您的代码假定$articles始终具有值。这意味着两件事之一是真的:

  1. 假设是错误的,您应该在尝试使用之前检查$articles是否有值。
  2. 假设是正确的,不需要if条件(因为它应该始终为true)并且可以完全删除。
  3. 可能假设错误的情况。

答案 1 :(得分:0)

文章不是一个对象。当您没有从DB获得任何结果时,可以将其放在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';
        }
}