我知道以前有人问过这个问题,但我经历的所有答案都没有真正的帮助。所以这应该输出一个主题的内容,但它告诉我
注意:未定义的变量:/var/www/article.php 中的文章在线 77
致命错误:在 /var/www/article.php 在第 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
}
?>
错误告诉您$articles
不是对象。 所以你从来没有定义过它。 请注意,您尝试定义它,但仅在条件语句中定义它。 因此,很明显,该条件代码块未被执行。
简而言之,if(isset($_GET['id'])){
可能正在评估false
而不是执行您的 PDO 代码。
目前,您的代码假定$articles
将始终具有一个值。 这意味着以下两件事之一是正确的:
- 假设是错误的,您应该在尝试使用它之前检查
$articles
是否有值。 - 假设是正确的,不需要
if
条件(因为它应该始终true
),并且可以完全删除。
假设是错误的。
文章不是对象。您可以将其放在 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';
}
}