我正在尝试使用JOOQ这样设置MySQL变量。 value
是用户输入。
DSLContext dslContext = DSL.using(connection, dialect);
dslContext.execute("set @myvar :=" + value);
尽管这可以按预期工作,但我担心通过用用户输入执行普通SQL可能允许的SQL注入。在JOOQ中,有没有一种方法可以通过准备好的语句或其他任何更安全的方法来实现相同的目的?
答案 0 :(得分:2)
使用普通的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在幕后始终会执行一条准备好的语句。