我知道之前有人问过,但我所经历的所有答案并没有真正帮助。 所以这应该输出一个主题的内容,但它告诉我
注意:未定义的变量:/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
}
?>
答案 0 :(得分:2)
错误告诉您$articles
不是对象。所以你从未定义过它。请注意,您尝试定义它,但仅限于条件语句。所以,显然,条件代码块没有被执行。
简而言之,if(isset($_GET['id'])){
可能正在评估false
而不执行您的PDO代码。
目前,您的代码假定$articles
始终具有值。这意味着两件事之一是真的:
$articles
是否有值。if
条件(因为它应该始终为true
)并且可以完全删除。可能假设错误的情况。
答案 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';
}
}