Php 将所有图像连接到它们的相对页面

Php 将所有图像连接到它们的相对页面,php,mysql,database,join,content-management-system,Php,Mysql,Database,Join,Content Management System,我在mysql数据库中有两个表:页面和图像(目前,我更喜欢“图像”是文本)。我需要每一页显示所有相关的图片。例如:第一页显示3个图像,第二页显示4个图像,第三页没有图像,等等。为了做到这一点,我创建了(遵循基本cms教程 ) 将两个表合并到数据库中: 页面: id,label,title,body,slug,created,updated id,page_id,content (for now, I prefer that the “image” is text) 图像: id,label,

我在mysql数据库中有两个表:页面和图像(目前,我更喜欢“图像”是文本)。我需要每一页显示所有相关的图片。例如:第一页显示3个图像,第二页显示4个图像,第三页没有图像,等等。为了做到这一点,我创建了(遵循基本cms教程

)

将两个表合并到数据库中:

页面:

id,label,title,body,slug,created,updated
id,page_id,content (for now, I prefer that the “image” is text)
图像:

id,label,title,body,slug,created,updated
id,page_id,content (for now, I prefer that the “image” is text)
不幸的是,我的查询只能显示一个图像,而不是与页面相关的所有图像,我不知道为什么。下面是对page.php的查询:

require 'app/start.php';

if (empty($_GET['page'])) {
    $page = false;
} else {
    $slug = $_GET['page'];

    $page = $db->prepare("  
        SELECT pages.id, pages.label, pages.title, pages.body, pages.slug, pages.created, pages.updated, images.id, images.page_id, images.content AS image_content

        FROM pages

        LEFT JOIN images
        ON pages.id = images.page_id

        WHERE slug = :slug

    ");

    $page->execute(['slug' => $slug]); 

    $page = $page->fetch(PDO::FETCH_ASSOC);

    var_dump($page);

    if ($page) {
        $page['created'] = new DateTime($page['created']);

        if ($page['updated']) {
            $page['updated'] = new DateTime($page['updated']);
        }
    }
}

require VIEW_ROOT . '/page/show.php';
此查询生成以下源(相对于第一页):

array(9) {
  ["id"]=>
  string(1) "1"
  ["label"]=>
  string(20) "This is the first page"
  ["title"]=>
  string(22) "This is the first page"
  ["body"]=>
  string(8) "Some text"
  ["slug"]=>
  string(10) "first-page"
  ["created"]=>
  string(19) "2015-10-05 10:55:54"
  ["updated"]=>
  string(19) "2015-10-05 10:55:54"
  ["page_id"]=>
  string(1) "1"
  ["image_content"]=>
  string(8) "groundhog"
}
如何看,图像内容只显示一个结果,但图像表的页面id记录了多个链接到页面id的图像。我错在哪里

然后我尝试了这个解决方案:

<?php

require 'app/start.php';

if (empty($_GET['page'])) {
    $page = false;
} else {
    $slug = $_GET['page'];

    $page = $db->prepare("  
        SELECT pages.id, pages.label, pages.title, pages.body, pages.slug, pages.created, pages.updated, images.id, images.page_id, images.content AS image_content

        FROM pages

        LEFT JOIN images
        ON pages.id = images.page_id

        WHERE slug = :slug

    ");

    $page->execute(['slug' => $slug]); 

    $page = $page->fetchAll(PDO::FETCH_ASSOC);

    foreach ($page as $key) {
        $select[] = array('created'=>$key['created'], 'updated'=>$key['updated'], 'image_content'=>$key['image_content'], 'title'=>$key['title'], 'body'=>$key['body']);
}

    var_dump($key['image_content']);

    if ($page) {
        $key['created'] = new DateTime($key['created']);

        if ($key['updated']) {
            $key['updated'] = new DateTime($key['updated']);
        }
    }
}

require VIEW_ROOT . '/page/show.php';

找不到页面,抱歉

创建于 最后更新
图像:

你只是一个普通人。如果要访问SQL查询的整个结果,则必须在循环查询结果时获取结果或单独处理每一行

  • 使用fetchAll:

    $page\u array=$page->fetchAll(PDO::FETCH\u ASSOC)

  • 使用循环:

    while($page\u row=$page->fetch(PDO::fetch\u ASSOC))
    {//do stuff}

  • 编辑:

    如果在show.php中更改循环,它应该可以工作

    <?php foreach($page as $result): ?>
                    <?php echo e($result['image_content']); ?><br/>
     <?php endforeach; ?>
    
    
    
    fetchAll:

    fetchAll返回多维关联数组。对于查询结果中的每一行,将向数组中添加另一行。如果查询返回3行,则可以通过$page[0]['variables']到$page[2][variables]访问它们。看

    关键要素


    我会考虑使用最后一个键数组后,你的Frach循环非常糟糕的做法。请参阅上的第一条警告。

    显示运行此查询的PHP代码。编辑你的问题,不要把它添加到评论中。我按照你的建议试过了,但我仍然不符合我的目标。怎么了?我编辑了主要内容topic@user33233401.你想用你的$selected完成什么?所有信息都已在关联数组$页面中。2.var_转储必须在循环内。Iskar,在$selected[]内,我将所有信息存储到特定变量中。如果我使用fetchAll,那么如果不获取未定义的索引消息error,我就不能直接使用$page['values'],我会添加show.php,这样你就可以看到我如何使用所选的[]数组。将var_dump插入foreach并不能解决我的问题。谢谢Iskar,它可以工作。你是对的,我必须学习更多,学习更深入。我学了那么多耶拉,但我可以做得更多,你说得对。“查看此处”链接报告一个不存在的页面。