我正在尝试像这样使用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将始终执行准备好的语句。