【问题标题】:How to send parameters of an sql-query in a different request?如何在不同的请求中发送 sql 查询的参数?
【发布时间】:2015-09-02 07:13:32
【问题描述】:
PostgreSQL 9.4
众所周知,JDBC-PreparedStatement 可以通过在与用于发送实际查询正文的查询不同的查询中发送参数来防止 sql 注入攻击。
我怎样才能将这样的两个查询直接发送到数据库或者RDBMS 不支持?我的意思是,preparedStatement 是否发挥其内部魔力并在不同的查询中发送查询参数,或者RDBMSs 本身支持?
【问题讨论】:
标签:
java
jdbc
prepared-statement
【解决方案1】:
prepareStatement 不包含不同的参数值,而只包含占位符(标有?)
con.prepareStatement("select cu_id, cu_last_name from customer where cu_id between ? and ?")
占位符(绑定变量)在执行之前设置为所需的值
stmt.setInt(1,100)
stmt.setInt(2,105)
查询被执行
stmt.executeQuery()
重要的事实是,dababase 可以重用语句以进行更多的执行,因此不会为每次执行完全解析语句(但细节取决于 DBMS),这可以提供更好的性能。
由于仅提供了参数值,因此阻止了 SQL 注入 - 无法更改 SQL 查询文本。