Foreach循环未正确显示从数据库中获取数据

问题描述

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

表格详细信息如下:

$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": "[email protected]","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": "[email protected]","code": "umtyw95hu4voe49rz95ej0cftmnglom1","time": "2020-08-17 17:26:40"
            }
}

一切都很好并且正确,但是当我想从数据库获取图像并且我想用特殊代码显示每张图像时,却只用代码向我显示一张图像。

我写这样的代码

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","time": "2020-08-17 17:26:40"
            }
        ],[
            {
                "id": "1","url": "..\/public\/uploadPic\/cb49f60092bb9b28e69487171208a0d09.jpg","token": "umtyw95hu4voe49rz95ej0cftmnglom1"
            }
        ]
    ]
}

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

解决方法

这可能会在单个查询中获取所需的结果,包括针对特定代码的图像(如果存在)。否则,它将在NULL表列中返回image

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