当前位置: 代码迷 >> J2EE >> sql字符串拼凑和绑定变量疑问和sql注入
  详细解决方案

sql字符串拼凑和绑定变量疑问和sql注入

热度:94   发布时间:2016-04-22 00:29:44.0
sql字符串拼接和绑定变量疑问和sql注入
在程序中经常需要进行sql字符串拼接,但是字符串拼接存在sql注入的问题。最好用绑定变量(用?等代替占位),但是用绑定变量存在的问题是sql语句是事先固定好的,如果用户某个字段可以不输入,这个字段为null,那么就会有问题,因为不应该把这个字段加到sql里。请问,这种问题大家都怎么解决的?谢谢
例如拼接字符串:
String sql = "select * from table "
String name = 用户输入名字
if(name!=null) {
  sql+="where name='$name'";
}else{
  //不对sql进行添加限制条件
}

这段代码用绑定变量形式怎么实现?如果有多个拼接条件,换成绑定变量的形式可以怎么实现?

------解决方案--------------------
一般这样解决:
List params = new ArrayList();
String sql = "select * from table "
String name = 用户输入名字
if(name!=null) {
sql+="where name=?";
params.add(name);
}else{
//不对sql进行添加限制条件
}
PrepareStament pstm = con.createPrepareStatment(sql);
for(int i =0 ; i < params.size(); i++){
pstm.setString(i+1, params.get(i));
}
..,,
然后就不说了,你应该知道了。hibernate hql查不多
------解决方案--------------------
探讨

一般这样解决:
List params = new ArrayList();
String sql = "select * from table "
String name = 用户输入名字
if(name!=null) {
sql+="where name=?";
params.add(name);
}else{
//不对sql进行添加限制条件
}
Prepar……

------解决方案--------------------
不晓得这样可以么!
Java code
public void test(String name,String sex){    String sql = "select * from user_info where 1 = 1 ";    if(name!=null) {        sql+="and name=?";    }else{        //不对sql进行添加限制条件    }    if(sex!=null) {        sql+="and name=?";    }else{        //不对sql进行添加限制条件    }          //假设已经有连接    Connection conn ;    PreparedStatement pre=conn.prepareStatement(sql);          //按参数顺序    int i=0;    if(name!=null)    pre.setString(++i, name);    if(sex!=null)    pre.setString(++i, sex);    pre.executeQuery();}
  相关解决方案