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

PHP7.2.4查询单条数据返回JSON正常,多条则无返回(200空响应)

问题排查与解决办法

嘿,我来帮你搞定这个诡异的问题!从你描述的现象和代码片段来看,主要问题大概率出在循环逻辑的写法或者JSON编码失败上,下面给你拆解分析并提供修正方案:

可能的问题根源

  1. 冗余且易出错的循环写法:你用while($i < $res->num_rows)加上data_seek($i)的方式遍历结果集,这种写法不仅没必要,还很容易在多行数据时出现遍历不完整或者数据收集遗漏的情况。
  2. JSON编码静默失败:当查询结果里包含非UTF-8编码的字符(比如特殊符号、乱码的中文),json_encode()会偷偷返回false,而如果你没做错误处理,直接输出这个false就会得到空响应,但HTTP状态码还是200(因为PHP没抛出显性错误)。
  3. 缺失正确的响应头:虽然单条数据时可能侥幸正常,但多条数据时如果没设置Content-Type为application/json,客户端可能无法正确解析响应,看起来像是空内容。

修正后的完整代码

<?php
// 先设置正确的响应头,告诉客户端这是JSON格式数据
header('Content-Type: application/json; charset=utf-8');

require_once "connexion.php";

// 去掉limit,测试多行数据场景
$sql = "select id,title,image from em0hb_yendifvideoshare_videos";
$res = $conn->query($sql);

// 先检查SQL查询是否成功
if (!$res) {
    echo json_encode(['error' => 'SQL查询失败: ' . $conn->error]);
    $conn->close();
    exit;
}

// 直接一次性获取所有结果,比手动循环靠谱得多
$rows = $res->fetch_all(MYSQLI_ASSOC);
$conn->close();

// 检查JSON编码是否成功,避免静默失败
$json_output = json_encode($rows);
if ($json_output === false) {
    $encode_error = json_last_error_msg();
    echo json_encode(['error' => 'JSON编码失败: ' . $encode_error]);
    exit;
}

// 输出最终的JSON数据
echo $json_output;
?>

关键优化点说明

  • 响应头设置:header('Content-Type: application/json; charset=utf-8')确保客户端能正确识别响应类型,避免解析异常。
  • 简化结果获取:用fetch_all(MYSQLI_ASSOC)直接获取所有关联数组形式的结果,彻底避免手动循环的潜在问题。
  • 错误排查机制:增加了SQL查询失败和JSON编码失败的错误提示,能帮你快速定位问题(比如如果是编码错误,会提示你具体是哪种编码问题,方便你处理数据库字符编码)。

额外排查建议

如果修正后还是有问题,可以检查:

  • 数据库表的字符编码是否为utf8mb4(支持所有Unicode字符),确保查询结果的编码和PHP输出编码一致。
  • 查看PHP的错误日志,确认有没有内存不足或者其他隐性报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:21:13