如何用芭蕾舞演员写准备好的陈述?

问题描述 投票:0回答:1

有没有办法在 ballerina 中编写 SQL 准备语句?或者使用以下方法是一个好的做法吗?

function selectUserQuery(string username) returns sql:ParameterizedQuery => `SELECT * FROM users WHERE user_name=${username}`;
prepared-statement sql-injection ballerina ballerina-swan-lake
1个回答
0
投票

在芭蕾舞演员中

sql:ParamerterizedQuery
充当准备好的陈述。 (这与其他语言略有不同,因为芭蕾舞演员在编写语句本身时要求给出变量顺序)

是的,使用函数是在 ballerina 中保留 SQL 语句的最佳实践。

为了完整起见,我想引用this文章中的以下内容。

考虑以下陈述,

sql:ParameterizedQuery selectQuery = `SELECT * FROM users WHERE user_name=${username}`;

Ballerina 分多个步骤执行此查询,

  1. 将查询模板化:

    sql 模块将使用

    ?
    替换查询中的插入。 (例如
    `SELECT * FROM users where user_name=?`
    )在这里,查询中的所有插入都被视为用户输入。

  2. 数据库编译查询:

    数据库验证模板化 SQL 查询的语法和语义(列可用性、授权)错误。最后,服务器解析查询。

  3. 占位符替换:

    程序将所有用户数据值发送到数据库。此时数据库将替换占位符。但是,由于查询是预编译的,即使数据库附加值,执行的范围也不会改变。即 SQL 注入无法将

    SELECT
    命令转换为
    DELETE

  4. 查询执行。

© www.soinside.com 2019 - 2024. All rights reserved.