公司有个项目是这样的,因为封装性,已经把查询条件定死在where XX=。例如XX的值有1,2,0这三种情况。怎么写SQL语句可以查询所有情况
比如 SELECT * FORM TABLE1 WHERE XX=要填写的
从而达到一条语句可以查询这三种情况呢
1、分三种情况分别查,然后程序里把数据合并
2、
把 (要填写的) 写成 (0 and xx=1 and xx=2)
拼接完整就是 (SELECT * FORM TABLE1 WHERE XX=0 and xx=1 and xx=2)
3、如果有单引号, SELECT * FORM TABLE1 WHERE XX=‘要填写的’
把 (要填写的) 写成 (0’ and xx=‘1’ and xx=‘2)
拼接完整就是 (SELECT * FORM TABLE1 WHERE XX=‘0’ and xx=‘1’ and xx=‘2’)
注意:2、3这两种就是sql简单注入的方法,如果你用2、3方法成功了,说明你们公司这个查询方法有很大的安全隐患,容易被别人sql注入。
没办法,本来是局域网应用不知道为什么非得用B/S架构来做,搞的现在整个软件部门都在做窗体兼容。
现在这个因为整个项目都是用代码生成器做的,然后有好多人在这基础上各自做各自的模块,今天把项目给我了,我不敢随便在底层加减函数。
我先用的SQL注入的方法试下吧
那个应该用 OR逻辑符
@鲁广广: 嗯嗯,没看清你的要求,不过还是建议你用第一种方法
没有封装性一词。如果从程序角度看的话直接在最下面的sql处统一拦截后做替换,如果从db角度看的话你直接把数据同步到另一个表里面就完了。
我的意思是,程序的sql操作的函数我不能改,只能修改逻辑层那一个where xx= 这一个
SELECT * FORM TABLE1 WHERE XX in(0,1,2)
有点扯淡,不能改就别做了,还有这种事