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

Ballerina SQL参数化查询报错:参数索引超出范围问题咨询

问题分析与解决

你的问题出在参数化查询的构建逻辑上:

在Ballerina的sql:ParameterizedQuery模板中,你给${userId}手动套了双引号,这会让SQL引擎把整个"91c7571c-5524-4f88-9e75-743fb94c3b48"当成固定字符串字面量,而非待绑定的参数。参数化查询的核心是由驱动自动处理参数占位与绑定,手动加引号的操作直接破坏了这个机制,导致驱动找不到需要绑定的参数,最终抛出Parameter index out of range错误。

修正后的代码

isolated function getUser(string userId) returns UserData|error {
    io:println("[User ID]: ", userId);
    // 移除userId周围的双引号,让参数化查询自动生成占位符
    sql:ParameterizedQuery query = `SELECT * FROM user WHERE id = ${userId}`;
    io:println("[Query]: ", query);
    return dbClient->queryRow(query);
}

关键说明

  • Ballerina参数化查询模板会自动将${userId}转换为数据库适配的占位符(如?),并由驱动安全完成参数绑定,无需手动添加引号。
  • 这种写法既解决了当前的参数索引错误,还能避免SQL注入风险,是参数化查询的标准用法。

原错误日志:

Error while executing SQL query: SELECT * FROM user WHERE id = \" ? \". Parameter index out of range (1 > number of parameters, which is 0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:52:42