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

PHP用户关注功能报错求助:Johnny关注Billy时触发Uncaught TypeError错误

排查Uncaught TypeError: array_column()参数为null的问题

首先看报错信息,问题明明白白出在array_column(NULL, 'userid')——当Johnny尝试关注Billy时,传给array_column的第一个参数是null,不符合函数要求的数组类型,直接触发了致命错误。

问题根源

盯着你的follow_user方法代码看,问题藏在这两行里:

$likes = json_decode($result[0]['following'],true);
$user_ids = array_column($likes, "userid");

当数据库中likes表对应Billy的那条记录里,following字段的值是空字符串、无效JSON,或者其他无法被json_decode解析成数组的内容时,json_decode会直接返回null。这时候你直接把$likes丢给array_column,自然就撞了TypeError的枪口。

至于为什么Billy关注Johnny没问题,反过来就出状况?大概率是Billy对应的likes记录里的following字段存在格式异常——比如之前的操作导致它变成了空字符串,而非标准的空JSON数组[]。

解决方法

核心思路就是确保$likes始终是一个数组,哪怕json_decode失败或者返回null。可以这么修复:

  1. 给json_decode加兜底逻辑
    用空合并运算符给$likes兜底成空数组,再额外加一层类型检查确保安全:

    // 替换原来的$likes和$user_ids两行代码
    $following_data = $result[0]['following'];
    $likes = json_decode($following_data, true) ?? [];
    // 额外保险:如果解析后不是数组,强制设为空数组
    if (!is_array($likes)) {
        $likes = [];
    }
    $user_ids = array_column($likes, "userid");
    
  2. 修复数据库里的异常数据
    找到likes表中type='user'且contentid为Billy用户ID的记录,把following字段的值改成[](标准空JSON数组),避免后续操作再踩同样的坑。

  3. 优化插入逻辑(可选)
    你当前else分支的插入逻辑是没问题的($arr2[] = $arr; $following = json_encode($arr2);),但可以额外验证下json_encode的结果,确保不会插入无效值,从源头减少异常数据的产生。

这样修改后,就算数据库里的following字段存在异常,代码也能安全处理,不会再抛出致命错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 16:37:41