我想从 Twig 中获取 PDO 数据库中多个对象的数据
I want to fetch data from twig for more than one object from the database in PDO
这是我从数据库中获取数据的方法代码。我将这些数据作为对象传递给 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
的方法 class:
* Show the index page
*
* @return void
*/
public function indexAction()
{
$news = new News();
$news = $news::getNews();
View::renderTemplate('Home/index.html', [
'news' => $news
]);
}
获得新闻对象后..我想根据降序时间戳添加帖子。我遇到的问题是 $news
没有获取整个 table 的数据。它只显示最新对象的数据。
<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()
,其中只有returns条记录。您需要使用 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()
and 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 参数、表单输入等),请不要使用此方法。此外,当您需要多次执行查询(例如使用不同的参数)时,准备好的语句具有更好的性能。
这是我从数据库中获取数据的方法代码。我将这些数据作为对象传递给 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
的方法 class:
* Show the index page
*
* @return void
*/
public function indexAction()
{
$news = new News();
$news = $news::getNews();
View::renderTemplate('Home/index.html', [
'news' => $news
]);
}
获得新闻对象后..我想根据降序时间戳添加帖子。我遇到的问题是 $news
没有获取整个 table 的数据。它只显示最新对象的数据。
<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()
,其中只有returns条记录。您需要使用 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()
and 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 参数、表单输入等),请不要使用此方法。此外,当您需要多次执行查询(例如使用不同的参数)时,准备好的语句具有更好的性能。