有没有办法在 ballerina 中编写 SQL 准备语句?或者使用以下方法是一个好的做法吗?
function selectUserQuery(string username) returns sql:ParameterizedQuery => `SELECT * FROM users WHERE user_name=${username}`;
在芭蕾舞演员中
sql:ParamerterizedQuery
充当准备好的陈述。 (这与其他语言略有不同,因为芭蕾舞演员在编写语句本身时要求给出变量顺序)
是的,使用函数是在 ballerina 中保留 SQL 语句的最佳实践。
为了完整起见,我想引用this文章中的以下内容。
考虑以下陈述,
sql:ParameterizedQuery selectQuery = `SELECT * FROM users WHERE user_name=${username}`;
Ballerina 分多个步骤执行此查询,
将查询模板化:
sql 模块将使用
?
替换查询中的插入。 (例如`SELECT * FROM users where user_name=?`
)在这里,查询中的所有插入都被视为用户输入。
数据库编译查询:
数据库验证模板化 SQL 查询的语法和语义(列可用性、授权)错误。最后,服务器解析查询。
占位符替换:
程序将所有用户数据值发送到数据库。此时数据库将替换占位符。但是,由于查询是预编译的,即使数据库附加值,执行的范围也不会改变。即 SQL 注入无法将
SELECT
命令转换为 DELETE
。
查询执行。