从函数返回多行 - MySQL数据库 - PDO

时间:2015-10-08 00:13:07

标签: php mysql function pdo

我在博客网站上工作,过去几天我一直在清理它,所以它使用了更多包含的功能而不是内联php。到目前为止,它确实很有帮助。

现在我正试图使用​​一个函数来获取数据库中的所有博客文章,这些文章存储如下:

enter image description here

以前我在我的主blog.php文件中执行此操作,该文件包含所有html。看起来像这样:

$stmt = $db->prepare("SELECT * FROM blog_posts ORDER BY id DESC");
$stmt->execute();
foreach($stmt as $blogPost)
{
    $dateTime = date("j F, Y g:i a", (strtotime($blogPost['date_posted'])));

    echo "<div class='blog-main-preview'>";
    echo "<p class='blog-preview-title'>" . $blogPost['title'] . "</p>";
    echo "<p id='blog-preview-date'>" . $dateTime . "</p><br>";
    $post = $blogPost['post'];
    $post = strip_tags($post);
    $post = substr($post, 0, 200);
    echo "<p id='blog-preview-post'>" . $post . "...</p><br>";
    echo "<a href='blog-post.php?postid=" . $blogPost['id'] . "' id='read-more'><p>Read More</p></a><br>";
    echo "</div>";

}

这很好用,但我也想把它转移到一个功能上。我意识到我可以将整个事情移动到一个函数中,我只是希望有一个解决方案,我没有必要在函数中使用任何html,并且它可以返回一些我可以运行的函数主blog.php文件中的foreach循环。我可以这样做吗?

编辑:所以要澄清一下,我正在寻找的是让我的blog.php页面看起来像:

$blogPosts = getBlogPosts($db);
foreach($blogPosts as $blogPost)
{
    $dateTime = date("j F, Y g:i a", (strtotime($blogPost['date_posted'])));

    echo "<div class='blog-main-preview'>";
    echo "<p class='blog-preview-title'>" . $blogPost['title'] . "</p>";
    echo "<p id='blog-preview-date'>" . $dateTime . "</p><br>";
    $post = $blogPost['post'];
    $post = strip_tags($post);
    $post = substr($post, 0, 200);
    echo "<p id='blog-preview-post'>" . $post . "...</p><br>";
    echo "<a href='blog-post.php?postid=" . $blogPost['id'] . "' id='read-more'><p>Read More</p></a><br>";
    echo "</div>";

}

函数文件将包含检索并返回blogPosts的函数。

3 个答案:

答案 0 :(得分:2)

<?php
function getBlogPosts($db) {
    $stmt = $db->prepare("SELECT * FROM blog_posts ORDER BY id DESC");
    $stmt->execute();

    // Get all results from the query as an array of associative arrays
    $rows = $sth->fetchAll();

    // Post-process results
    // Use `&` to get a reference to each row to prevent the default 
    // "copy on write" behavior of PHP's arrays from detaching our 
    // changes from the $rows array. Without this, the updated $row[X]
    // values would only be visible inside the foreach loop.
    foreach ($rows as &$row) {
      $row['date_posted'] = date("j F, Y g:i a", strtotime($row['date_posted']));
      $row['post'] = strip_tags($row['post']);
      $row['post'] = substr($row['post'], 0, 200);
    }

    return $rows;
}

$blogPosts = getBlogPosts($db);
foreach($blogPosts as $blogPost)
{ ?>

<div class="blog-main-preview">
  <p class="blog-preview-title"><?= htmlspecialchars($blogPost['title']) ?></p>
  <p id="blog-preview-date"><?= htmlspecialchars($blogPost['date_posted']) ?></p><br>
  <p id="blog-preview-post"><?= htmlspecialchars($blogPost['post']) ?>...</p><br>
  <a href="blog-post.php?postid=<?= urlencode($blogPost['id']) ?>" id="read-more"><p>Read More</p></a><br>
</div>

<?php } ?>

答案 1 :(得分:1)

您只需从函数返回AttributeError: 'module' object has no attribute 'Storage' 即可。

$stmt

答案 2 :(得分:0)

function getBlogPosts($db){
$stmt = $db->prepare("SELECT * FROM blog_posts ORDER BY id DESC");
$stmt->execute();
return $stmt->fetchAll();
}