php - 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"
}
]
]
}
第二张图片没有显示,我不知道为什么。
解决方案
这可能会在单个查询中获取想要的结果,包括特定代码的图像(如果存在)。否则,它将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
推荐阅读
- c# - 在 Stripe API 调用中扩展 Source 对象到 StripeBalenceService 不会返回任何客户信息
- android - 如何制作从上到下稍微弯曲的反应角?我的意思是顶部的从上到下的曲线
- regex - 正则表达式删除除字符串以外的所有文本
- python - 无法运行由 pyinstaller 创建的 exe 文件
- networkx - 区分不同颜色的类 Networkx
- python - 在 Django Rest Framework 中,编写自定义函数来过滤 db
- html - 响应式滚动背景问题
- reactjs - 如何从反应组件中的按钮组中获取值
- hive - 为什么 Hive 不喜欢这个查询?
- python - 通道。2 暴力 Python 语法错误:ValueError:int() 的无效文字,基数为 10:'21,'