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
相关产品推荐
相关产品推荐

