为什么下面的代码加个?就能防止注入?

我想要达到的结果

img

img

如题主所描述,当出现占位符"?"时,会执行平时多执行pstt.setInt(1,id)语句。
1就是sql的第一个参数的意思,
pstm.setint(1,id); 就是把id替代sql的第一个问号

这是 预编译接口 预编译的 意思就是,先把 SQL 语句编译了,再执行
? 号 代表占位符, 有一个?号, 编译的时候就知道这里有一个位置, 需要放一个数据进来
有两个, 就要放两个数据,
1,2 这两个数就是占位符的编号, 从1 开始的,
对占位符的赋值 必须在 ps.executequery(); 之前

这样就会有效避免通过?注入,防止恶意语句的执行。

我是这么理解的。
sql注入的产生是因为我们 拼接了我们自己加入的sql语句进去了。我们的sql语句执行了
这里的?是占位符,就是这个语句已经写死了,它的模式就是这样了,不能发生改变了。我们不能拼接进去别的sql语句。
我们正常传递的参数,就会替换掉?的位置。

不一定准确啊

使用?作为占位符,填入字段的值,执行sql语句时,会进行严格的类型检查。