繁体   English   中英

我想从 Twig 中获取 PDO 数据库中多个对象的数据 [重复]

[英]I want to fetch data from twig for more than one object from the database in PDO [duplicate]

这是我从数据库中获取数据的方法代码。 我将这些数据作为对象传递以在 html 文件中使用。

     * Get news details
     * 
     * @return object
     */
    public static function getNews()
    {
        $sql = 'SELECT * FROM news 
                ORDER BY date DESC';

        $db = static::getDB();
        $stmt = $db->prepare($sql);

        $stmt->setFetchMode(PDO::FETCH_CLASS, get_called_class());

        $stmt->execute();

        $news = $stmt->fetch();

        return $news;
    }

现在,这是我的索引页面渲染函数getNews()News类的方法:

     * Show the index page
     *
     * @return void
     */
    public function indexAction()
    {
        $news = new News();
        $news = $news::getNews();

        View::renderTemplate('Home/index.html', [
            'news' => $news
        ]); 
    }

获得新闻对象后......我想根据降序时间戳添加帖子。 我遇到的问题是$news没有获取整个表的数据。 它只显示最新对象的数据。

    <div class="row">

                {% for eachnews in news %}

                    <div class="col-4 mt-4">
                        <div class="card" style="width: 18rem;">
                            <img src="/uploads/news/{{ eachnews.fullfilename }}" class="card-img-top" alt="...">
                            <div class="card-body">
                                <h5 class="card-title">{{ eachnews.title }}</h5>
                                <p class="card-text">{{ eachnews.description }}</p>
                                <a href="news" class="btn btn-primary">Read More</a>
                            </div>
                        </div>
                    </div>

                {% endfor %}

            </div>

每一个建议和答案都受到高度赞赏。 如果我的问题不清楚,请问我。

您正在使用PDO::fetch() ,它只返回一条记录。 您需要使用PDO::fetchAll()来获取...所有记录。

    public static function getNews()
    {
        $sql = 'SELECT * FROM news 
                ORDER BY date DESC';

        $db = static::getDB();
        $stmt = $db->prepare($sql);

        $stmt->setFetchMode(PDO::FETCH_CLASS, get_called_class());

        $stmt->execute();

        $news = $stmt->fetchAll();

        return $news;
    }

请参阅PDO::fetch()PDO::fetchAll()文档页面。

顺便说一句,在这种非常特殊的情况下,您不需要准备声明,因为:

  • 你不会多次使用它
  • 你不注入用户数据

因此,您可以简单地使用PDO::query()

    public static function getNews()
    {
        $sql = 'SELECT * FROM news 
                ORDER BY date DESC';

        $db = static::getDB();

        return $db->query($sql, PDO::FETCH_CLASS, get_called_class());
    }

如果您需要注入用户输入(用户可能修改的输入,如 URL 参数、表单输入等),切勿使用此方法。 此外,当您需要多次执行查询(例如,使用不同的参数)时,准备好的语句具有更好的性能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM