【问题标题】:PDO query results not properly going into an arrayPDO 查询结果未正确进入数组
【发布时间】: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 提到的,您可能需要检查您的board id。
  • 你不会错过任何东西,结果会正确地进入数组。您的代码返回与 where 条件匹配的确切行
  • 在旁注中,请记住you're not the only user of site。不要捕获错误来报告它们
  • 你们完全正确,@Anant 和 metromatch。我将错误的板号传递给函数 - 这可能是我应该检查的第一件事。这是一个粗心的错误,感谢您的耐心和很棒的人。

标签: php mysql arrays pdo


【解决方案1】:

正如@anant 和@subwaymatch 指出的那样,board id 在这件事中 = 1。问题在于我尝试为其检索信息的板是板 #2。

感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    相关资源
    最近更新 更多