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

解决mysqli_stmt::bind_param()未知命名参数报错问题

解决mysqli_stmt::bind_param() 报错问题

问题描述

执行MySQLi预处理查询时,调用$stmt->bind_param($types, ...$values);触发报错:

mysqli_stmt::bind_param() does not accept unknown named parameters

查询语句$Query为动态生成,已包含合法的问号占位符,$types(如"sssi")与$values数组的元素数量、类型完全匹配,但两者的元素数量不固定(可能单个或多个)。原实现代码如下:

$results_array = [];
if (!empty($values)) :
    $stmt = $mysqli->prepare($Query);
    $stmt->bind_param($types, ...$values);
    $stmt->execute();
    $result = $stmt->get_result();
    while($row = $result->fetch_array()) :
        $results_array[] = $row;
    endwhile;
    $stmt->close();
    return $results_array;
endif;

注:$mysqli为已初始化的数据库连接实例

优化后的解决方案

问题解决后的优化代码(作为大型函数的一部分,$selType为外部传入的结果格式控制参数):

$results_array = [];
if (!empty($values)) :
    $stmt = $mysqli->prepare($Query);
    $stmt->bind_param($types, ...$values);
    $stmt->execute(array_values($values));
    $result = $stmt->get_result();
    if ($selType === "assoc") :
        while($row = $result->fetch_assoc()) :
            $results_array[] = $row;
        endwhile;
    else :                  
        while($row = $result->fetch_array()) :
            $results_array[] = $row;
        endwhile;
    endif;
    $stmt->close();
    return $stmt->get_result()->fetch_all();
 endif;

核心修复点

  • 将execute()的参数改为array_values($values):把关联数组转为纯索引数组,规避命名参数不被bind_param接受的问题;
  • 新增结果格式分支:通过$selType参数支持返回关联数组(fetch_assoc())或混合数组(fetch_array());
  • 批量获取结果:最后调用fetch_all()直接返回全部结果集,简化循环拼接逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 16:25:16