使用 JOOQ 安全地设置 MySQL 变量和用户输入

Set MySQL variables using JOOQ with user inputs securely

我正在尝试像这样使用 JOOQ 设置一个 MySQL 变量。 value 是用户输入。

DSLContext dslContext = DSL.using(connection, dialect);
dslContext.execute("set @myvar :=" + value);

虽然这按预期工作,但我担心通过用户输入像这样执行普通 SQL 可能允许的 SQL 注入。在 JOOQ 中有没有办法用准备好的语句或任何其他更安全的方式实现同​​样的事情?

使用普通 SQL 模板 API: https://www.jooq.org/doc/latest/manual/sql-building/plain-sql-templating

例如如果您使用的是简单的绑定变量:

 dslContext.execute("set @myvar := ?", value);

或者,如果您想使用更复杂的表达式:

 dslContext.execute("set @myvar := {0}", DSL.val(value));

在幕后,默认情况下,jOOQ 将始终执行准备好的语句。