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

Flutter调用PHP的ServerData::add_comment方法添加评论时出现‘命名参数后不能使用位置参数’错误的解决求助

解决Flutter调用评论接口时的PHP语法错误:Cannot use a positional argument after a named argument

错误原因分析

你遇到的这个错误是PHP语法错误,问题出在array_key_exists(key:'product_id', $data)这一行:

  • array_key_exists的标准参数顺序是(要检查的键, 目标数组)
  • 当你给第一个参数使用命名参数(key:'product_id')后,后续的参数必须也使用命名参数,不能再用位置参数(这里的$data就是位置参数),PHP不允许这种混合写法。

可行解决方案

方案1:使用传统位置参数(推荐,兼容所有PHP版本)

直接去掉命名参数,按照函数定义的顺序传参,这是最稳妥的写法:

public function add_comment($data){
    // 修正array_key_exists的写法
    $product_id = array_key_exists('product_id', $data) ? $data['product_id'] : 0;
    if(isset($_POST['name']) && isset($_POST['email']) && isset($_POST['comment'])){
        $name=$_POST['name'];
        $email=$_POST['email'];
        $comment=$_POST['comment'];
        $new_comment=$this->connection->prepare("INSERT INTO `comment` ( `name`, `email`, `content`, `product_id`, `parent_id`, `status`) VALUES (?, ?, ?, ?, 0, 1)");
        $new_comment->execute([$name,$email,$comment,$product_id]);
    }
}

方案2:使用完整的命名参数(仅支持PHP 8.0+)

如果你的服务器运行PHP 8.0及以上版本,也可以给两个参数都指定命名,保持语法一致性:

public function add_comment($data){
    $product_id = array_key_exists(key: 'product_id', array: $data) ? $data['product_id'] : 0;
    // 后续代码不变
}

额外逻辑优化建议

从你的代码来看,存在一个潜在逻辑问题:你同时使用了方法参数$data和全局$_POST变量,这可能导致数据读取异常:

  • 如果Flutter是通过JSON格式发送POST请求,$_POST会是空数组,导致你的if条件不成立,评论无法插入。
  • 建议统一从方法参数$data中读取所有参数,确保数据来源一致:
public function add_comment($data){
    $product_id = array_key_exists('product_id', $data) ? $data['product_id'] : 0;
    // 从$data中获取评论参数,而不是$_POST
    if(isset($data['name']) && isset($data['email']) && isset($data['comment'])){
        $name = $data['name'];
        $email = $data['email'];
        $comment = $data['comment'];
        $new_comment = $this->connection->prepare("INSERT INTO `comment` ( `name`, `email`, `content`, `product_id`, `parent_id`, `status`) VALUES (?, ?, ?, ?, 0, 1)");
        $new_comment->execute([$name,$email,$comment,$product_id]);
    }
}

内容的提问来源于stack exchange,提问作者nafashmn.ir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 07:43:14