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

PHP PDO读取数据库JSON字段title报错:Illegal string offset 'title'求助

解决 "Illegal string offset 'title'" 报错问题

这个错误我太熟悉了——你犯了一个很常见的JSON解析顺序错误,咱们一步步拆解问题并解决:

错误原因分析

你当前的代码里,$row['menu_content']是数据库存储的JSON字符串,而你直接尝试用$row['menu_content']['title']去取属性,这就相当于试图从普通文本字符串里用数组下标取值,PHP自然会报"非法字符串偏移"的错误。而且你还把['title']写到了json_decode的参数里,逻辑完全搞反了。

另外,你的JSON数据是被数组包裹的(开头是[,结尾是]),所以解析后会得到一个数组,而不是直接的对象/关联数组,这也是容易踩坑的点。

修复后的代码

把你前端表格里对应<td>的代码替换成下面这段:

<td>
    <?php
    // 第一步:将JSON字符串解析为PHP关联数组
    $menu_content_data = json_decode($row['menu_content'], true);
    
    // 第二步:安全获取title值(处理解析失败、结构异常的情况)
    if (is_array($menu_content_data) && !empty($menu_content_data) && isset($menu_content_data[0]['title'])) {
        // 用htmlspecialchars转义特殊字符,避免XSS攻击
        echo htmlspecialchars($menu_content_data[0]['title']);
    } else {
        // 解析失败或结构不对时显示默认内容
        echo '未设置标题';
    }
    ?>
</td>

关键细节说明

  1. 正确的解析顺序:先对整个$row['menu_content']字符串执行json_decode,得到PHP数组后再去取title属性,而不是反过来。
  2. 处理数组包裹的JSON:你的JSON是[{"title":...}]格式,解析后是一个数组,所以要通过$menu_content_data[0]['title']访问第一个元素里的title字段。
  3. 安全判断:加入is_array、!empty、isset的判断,防止JSON格式错误、数据为空或者结构变更时出现新的报错。
  4. XSS防护:用htmlspecialchars输出内容,避免用户输入的特殊字符破坏页面结构或引发安全问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 09:43:14