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

PHP无法将mysqli查询的SQL结果写入JSON文件问题求助

PHP写入mysqli查询结果到JSON文件无变化问题排查方案

以下是几个常见的错误原因和对应的修复方法:

  • 权限不足
    运行PHP的进程(如web服务对应的www-data、apache用户,或CLI模式下的当前登录用户)没有脚本执行目录的写入权限,或是已存在的takeOutItems.json文件设置了禁止写入的权限。可以先尝试给目标目录开通写入权限,或是直接指定绝对路径验证权限问题。
  • JSON编码失败
    如果查询结果中存在非UTF-8编码的内容,json_encode会直接返回false,此时写入的内容为空,看起来就像文件没有变化。可以加错误判断定位编码问题:
    $json = json_encode($rows);
    if ($json === false) {
        echo json_last_error_msg();
    }
    
    也可以在查询前指定数据库连接编码为UTF-8避免该问题:
    mysqli_set_charset($mysqli, 'utf8mb4');
    
  • 路径错误
    你使用了相对路径指定文件,PHP的当前工作目录不一定等于脚本所在目录,生成的文件可能被存到了其他位置。可以用var_dump(getcwd())打印当前工作目录确认文件位置,也可以直接用绝对路径写文件:
    $filePath = __DIR__ . '/takeOutItems.json';
    
  • 文件打开失败未捕获
    你没有判断fopen的返回值,如果文件打开失败,后续写入操作不会生效,加判断即可定位问题:
    $fileobj = fopen($filePath, 'w');
    if (!$fileobj) {
        die("文件打开失败");
    }
    

修正后的参考代码

// 指定连接编码避免中文乱码和JSON编码失败
mysqli_set_charset($mysqli, 'utf8mb4');
$sth = mysqli_query($mysqli, "SELECT * FROM `table`");
$rows = array();
while($r = mysqli_fetch_assoc($sth)) {
    $rows[] = $r;
}
$mysqli->close();

$filePath = __DIR__ . "/takeOutItems.json";
$jsonContent = json_encode($rows, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
if ($jsonContent === false) {
    die("JSON生成失败:" . json_last_error_msg());
}

$fileobj = fopen($filePath, 'w');
if (!$fileobj) {
    die("文件打开失败,请检查目录权限:" . $filePath);
}
fwrite($fileobj, $jsonContent);
fclose($fileobj);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:06:03