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

PHP调用MariaDB的API本地正常但线上read.php无返回数据排查求助

问题根因

  1. 数据库连接未指定UTF-8字符集:当前PDO连接代码未设置字符集,当tester表中存在非UTF-8编码内容(如乱码中文、特殊符号)时,json_encode()会因无法处理非UTF-8字符返回false,无任何输出。test表无此类异常字符所以可以正常输出。
  2. 输出缓冲区大小限制:tester表384条记录生成的JSON体积大于test表的115条,超过PHP默认的输出缓冲区上限时会出现内容截断、无输出的情况。
  3. 无JSON编码错误校验:现有代码未捕获json_encode()的错误,出错时无法感知问题。
  4. 部分文件存在格式问题:read.php或call.php可能携带BOM头、文件开头有前置空格/换行,导致输出被提前触发、JSON结构被破坏。

解决方案

1. 修复数据库连接字符集

修改/config/Database.php中的PDO连接代码,明确指定charset=utf8mb4:

try {
  $this->conn = new PDO(
    'mysql:host=' .$this->host . ';dbname=' .$this->db_name . ';charset=utf8mb4',
    $this->username,
    $this->password
  );
  $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e) {
  echo 'Connection Error: ' . $e->getMessage();
}

2. 排查文件格式问题

检查read.php、call.php的文件编码为无BOM的UTF-8格式,确认<?php标签前没有任何空格、换行、不可见字符,避免提前输出内容破坏JSON结构。

3. 添加JSON编码错误校验

修改read.php中输出JSON的代码,添加错误判断,异常时返回可定位的错误信息:

$json = json_encode($post_arr, JSON_UNESCAPED_UNICODE);
if (json_last_error() !== JSON_ERROR_NONE) {
  echo json_encode([
    'code' => 500,
    'message' => 'JSON编码失败:' . json_last_error_msg()
  ]);
  exit;
}
echo $json;

JSON_UNESCAPED_UNICODE参数可避免中文被转义,减少JSON体积。

4. 调整输出缓冲区配置

在read.php顶部添加代码解除输出、内存限制:

ini_set('memory_limit', '128M');
ob_clean();

Apache环境可同时在.htaccess文件添加配置:

php_value output_buffering 4096
php_value memory_limit 128M

5. 批量输出优化(可选)

如果后续数据量继续增长,可改为逐行输出JSON,避免一次性加载所有数据到内存:

if ($num > 0) {
  echo '{"data":[';
  $first = true;
  while($row = $result->fetch(PDO::FETCH_ASSOC)) {
    if (!$first) echo ',';
    $first = false;
    echo json_encode($row, JSON_UNESCAPED_UNICODE);
  }
  echo ']}';
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:21:04