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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:40:13