PHP应用跨系统运行后仅返回数据库单条结果的问题求助
问题分析与解决方案
哦,我一眼就看到问题所在了——这根本不是系统配置的锅,是你获取查询结果的方式只拿了第一行数据!
为什么只显示1条结果?
mysqli_fetch_assoc($res) 这个函数每次调用只会返回结果集中当前指针指向的那一行,调用后指针会自动下移。你直接把它赋值给$res_array,自然只能拿到第一条数据,不管你的数据库表里有多少条记录。之前系统运行“正常”,大概率是当时表中刚好只有1条数据,或者你之前的代码里写了循环但这次漏掉了。
修正代码的两种方法
方法1:用循环遍历所有结果行
这是最通用的方式,兼容性最好:
$HOST = 'localhost'; $USERNAME = 'root'; $PASSWORD = ''; $DATABASE = 'db_test'; $con = mysqli_connect($HOST,$USERNAME,$PASSWORD,$DATABASE); // 别忘了检查连接错误 if (!$con) { die("连接失败: " . mysqli_connect_error()); } $sql = "SELECT * FROM test "; $res = mysqli_query($con,$sql); // 检查查询是否成功 if (!$res) { die("查询失败: " . mysqli_error($con)); } // 循环收集所有行到数组 $res_array = []; while ($row = mysqli_fetch_assoc($res)) { $res_array[] = $row; } echo json_encode($res_array); mysqli_free_result($res); mysqli_close($con);
方法2:用mysqli_fetch_all()一次性获取所有结果
如果你的PHP版本在5.3.0及以上,且mysqli驱动支持的话,可以用这个更简洁的方法:
// ... 前面的连接和查询代码和上面一致 ... // 一次性获取所有关联数组格式的结果 $res_array = mysqli_fetch_all($res, MYSQLI_ASSOC); echo json_encode($res_array); // ... 释放结果、关闭连接 ...
额外提醒
- 永远记得检查数据库连接和查询的错误,这能帮你快速排查其他潜在问题(比如新系统里的数据库权限、表名拼写错误等)。
- 新系统的PHP或MySQL版本差异可能会有一些细节影响,但这次的核心问题完全是结果集获取方式的错误,不需要修改系统配置。
内容的提问来源于stack exchange,提问作者Mohamad Pishdad
相关产品推荐
相关产品推荐

