【发布时间】:2017-03-02 06:57:38
【问题描述】:
我正在建立一个网络论坛,用于练习使用我以前从未使用过的新技术。具体来说,我使用的是 PDO 而不是 mysqli,在最近的挂断之前它一直很漂亮。
我现在要做的最重要的事情是从我的posts 表中选择所有行,将其放入关联数组中,然后循环遍历每一行以输出数据,以便人们可以选择哪个线程他们想敞开心扉。
目前正在发生的事情是我的数组中只有一行。我知道这不是我的 SQL,因为当我在 Web 浏览器之外运行它时,它会按预期工作,所以我认为这与我尝试迭代结果的方式或我在返回中存储信息的方式有关多变的。这是我的代码...
function get_posts($board){
include("db_connect.php");
$sql = "SELECT * FROM posts
WHERE board = ?
ORDER BY stickied DESC, date DESC";
try{
$sth = $dbh->prepare($sql);
$sth->bindValue(1, $board, PDO::PARAM_INT);
$sth->execute();
$results = $sth->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
echo $e->getMessage() . "<br>";
}
return $results;
}
以及在我的网页上运行它的代码...
$posts[] = get_posts(1);
// output all of the posts
print_r($posts);
它给我的数据是……
Array (
[0] => Array (
[user_id] => 1
[date] => 2017-02-28 16:58:54
[post_id] => 1
[board] => 1
[stickied] => 1
[post_text] => Please Ignore
[post_title] => Test Post Please Ignore
)
)
此表中当前有 3 个帖子(行)。我知道我所缺少的可能是 PDO 如何工作的基础,但我就是想不通。任何帮助将不胜感激!
【问题讨论】:
-
您表中的所有 3 个帖子都有
board=1吗?似乎只有一个有board=1。检查确认 -
我在这里没有看到问题。正如@Anant 提到的,您可能需要检查您的
boardid。 -
你不会错过任何东西,结果会正确地进入数组。您的代码返回与 where 条件匹配的确切行
-
在旁注中,请记住you're not the only user of site。不要捕获错误来报告它们
-
你们完全正确,@Anant 和 metromatch。我将错误的板号传递给函数 - 这可能是我应该检查的第一件事。这是一个粗心的错误,感谢您的耐心和很棒的人。