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

PHP Web服务报错:[]运算符不支持字符串类型,非重复问题求助

解决“[]运算符不支持字符串类型”的致命错误

咱们先揪出你代码里的问题根源:

$posts = array();
// ...
while($post = mysql_fetch_assoc($result)) {
    $posts[] = $post;
    $posts = array_shift($posts);
}

问题拆解

第一次进入循环时:

  1. $posts[] = $post 把第一条查询结果塞进了数组,此时$posts是包含单个元素的数组。
  2. 紧接着$posts = array_shift($posts)会把数组的第一个元素(也就是那条post数据)取出来,赋值给$posts。这时候$posts已经不再是数组类型,变成了单个的关联数组(或者字符串类型,取决于你的数据结构)。

等循环第二次执行时,你又尝试用$posts[] = $post——这就相当于给非数组变量用数组追加运算符,自然触发了“[]运算符不支持字符串类型”的致命错误。

修复方案

根据你的实际需求,有两种常用修复方式:

方式1:只需要获取匹配的第一条数据(从你用array_shift的操作来看,大概率是这个需求)

既然只需要第一条数据,完全没必要用循环,直接一次获取就行:

$query = "SELECT * FROM Journey WHERE Token='{$token}';";
$result = mysql_query($query,$link) or die('Errant query: '.$query);
$posts = array();
$dto = new Journey();
$dta = new Dta();
if(mysql_num_rows($result) > 0) {
    $posts = mysql_fetch_assoc($result);
    // 这里写后续处理$posts的逻辑
}

方式2:需要获取所有匹配token的数据

如果你的token可能对应多条结果,那就去掉array_shift那行,让$posts始终保持数组类型:

$query = "SELECT * FROM Journey WHERE Token='{$token}';";
$result = mysql_query($query,$link) or die('Errant query: '.$query);
$posts = array();
$dto = new Journey();
$dta = new Dta();
if(mysql_num_rows($result) > 0) {
    while($post = mysql_fetch_assoc($result)) {
        $posts[] = $post;
    }
    // 这里写后续处理$posts数组的逻辑
}

额外提示

另外要注意:你现在用的mysql_*系列函数已经在PHP 5.5后被废弃,PHP 7更是直接移除了它。为了代码的安全性和兼容性,建议尽快换成mysqli_*或者PDO扩展。同时,你直接把$token拼进SQL语句的写法存在SQL注入风险,换成预处理语句就能解决这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:23:02