You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP+MySQLi两张表关联查询异常:仅返回第一条数据求助

嘿,作为刚接触PHP&MySQLi时踩过无数坑的过来人,我大概率能猜到你遇到的问题!

首先最常见的原因:你没有用循环遍历关联查询的结果集。mysqli_fetch_array()每次调用只会从结果集中取出一行数据,如果只调用一次,自然只能拿到第一条。而你之前用$query_type能显示所有韩国菜,应该是当时写了while循环来遍历结果,但换成关联查询的$query_fetch时,可能只调用了一次mysqli_fetch_array(),所以只返回了第一条。

举个例子,错误的写法是这样的:

// 只取了一行,自然只能看到第一条数据
$row = mysqli_fetch_array($query_fetch);
echo $row['food_name'] . ' - 评分:' . $row['rating'];

正确的做法是用while循环遍历整个结果集:

// 循环取出每一行数据,直到结果集为空
while ($row = mysqli_fetch_array($query_fetch)) {
    echo $row['food_name'] . ' - 描述:' . $row['description'] . ' - 评分:' . $row['rating'] . '<br>';
}

另外还有两种可能需要排查:

  • 关联查询的SQL语句有问题:比如你用了INNER JOIN但部分韩国菜没有对应的评分记录,导致这些菜品被过滤掉?或者不小心加了LIMIT 1?建议检查你的SQL语句,比如正确的关联查询应该是这样(假设食物表是foods,评分表是ratings,两表通过food_id关联):
SELECT f.food_name, f.description, r.rating 
FROM foods f
LEFT JOIN ratings r ON f.food_id = r.food_id
WHERE f.cuisine_type = 'korean'

用LEFT JOIN可以保证即使菜品没有评分也能被显示出来。

  • 结果集被提前消耗:如果你在调用mysqli_fetch_array($query_fetch)之前,已经用mysqli_fetch_assoc()这类fetch方法操作过这个结果集,结果集是单向的,已经取过的行就不能再重复取了,也会导致只能拿到剩下的行(甚至只剩第一条)。

先检查循环的问题,这大概率是你当前的症结所在!

内容的提问来源于stack exchange,提问作者Sang Nguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:52:44