首页 > 解决方案 > Foreach 循环未正确显示从数据库中获取数据

问题描述

我在数据库中有两个表(详细信息和图像),并且我正确获取了第一个表(详细信息)。详细信息有一行名称为代码,我想使用详细信息表中的代码元素获取图像表。

表的详细信息是这样的:

$response = array();

$sql = " SELECT * FROM `details` ORDER BY `id` DESC ";
$run = $connect->prepare($sql);
$run->execute();
$record = $run->fetchAll(PDO::FETCH_ASSOC);
$response['res'] =[$record];
echo json_encode($response,JSON_PRETTY_PRINT);

响应是这样的:

{
    "res": [
        [
            {
                "id": "1",
                "title": "bucher",
                "name": "jack sib",
                "start": "7am to 6pm",
                "details": "gtgtty rtrtrt",
                "user": "example@yahoo.com",
                "code": "ulv1mx8wztcyvf55ns4hlcgr11lzktyh",
                "time": "2020-08-21 16:24:19"
            },
            {
                "id": "2",
                "title": "super market",
                "name": "alibaba",
                "start": "6 Am to 6 Pm",
                "details": "everything is good and get better",
                "user": "example2@yahoo.com",
                "code": "umtyw95hu4voe49rz95ej0cftmnglom1",
                "time": "2020-08-17 17:26:40"
            }
}

一切都很好而且正确,但是当我想从数据库中获取图像并且我想用特殊代码显示每个图像时,它只显示一个带有代码的图像。

我写这样的代码fething图像:

foreach ($record as $row){
        $sqlImage = " SELECT * FROM `image` WHERE code= ? LIMIT 1 ";
        $runImage = $connect->prepare($sqlImage);
        $runImage->bindValue(1, $row['code']);
        $runImage->execute();
        $recordImage = $runImage->fetchAll(PDO::FETCH_ASSOC);
    }

响应是:

{
    "advert": [
        [
            {
                "id": "1",
                "title": "bucher",
                "name": "jack sib",
                "start": "7am to 6pm",
                "details": "gtgtty rtrtrt",
                "user": "example@yahoo.com",
                "code": "ulv1mx8wztcyvf55ns4hlcgr11lzktyh",
                "time": "2020-08-21 16:24:19"
            },
            {
                "id": "2",
                "title": "super market",
                "name": "alibaba",
                "start": "6 Am to 6 Pm",
                "details": "everything is good and get better",
                "user": "example2@yahoo.com",
                "code": "umtyw95hu4voe49rz95ej0cftmnglom1",
                "time": "2020-08-17 17:26:40"
            }
        ],
        [
            {
                "id": "1",
                "user": "example2@yahoo.com",
                "url": "..\/public\/uploadPic\/cb49f60092bb9b28e69487171208a0d09.jpg",
                "token": "umtyw95hu4voe49rz95ej0cftmnglom1"
            }
        ]
    ]
}

第二张图片没有显示,我不知道为什么。

标签: phpmysqlpdoforeach

解决方案


这可能会在单个查询中获取想要的结果,包括特定代码的图像(如果存在)。否则,它将NULLimage表格列中返回。

SELECT details.*, image.* FROM details LEFT JOIN details 
ON image.code = details.code ORDER BY details.id DESC

请注意,您正在从image表中提取所有数据,这似乎没有必要,因为您已经拥有第一个表中的代码并且只需要图像 URL 和令牌。

您可以重写查询以仅附加第二个表中的图像:

SELECT details.*, image.url, image.token FROM details LEFT JOIN details 
ON image.code = details.code ORDER BY details.id DESC

推荐阅读