【发布时间】:2014-06-30 16:25:43
【问题描述】:
表格
id name value
1 abc 12
2 def 13
4 mkg 14
5 pcr 10
select * from table where name = 'abc' and value = 12;--------------------- 这会给我
的结果1 abc 12
SELECT * FROM table WHERE name = 'abc' AND value = 12 OR 1=1
这将列出我所有的项目,因为它应该只列出 name='abc' 然后搜索值 12 或任何东西,如果不是 12 意味着空白,它应该可以。
1 abc 12
2 def 13
4 mkg 14
5 pcr 10
在这里,我只想获取 name='abc',但每次查询时都必须运行两个条件。 like (select * from table where name=x and value=x or 1=1)
应该显示:
1 abc 12
idia 是用户将通过输入为其中一列赋予值,结果应根据用户输入进行搜索。
query: (SELECT * FROM table WHERE name = x or 1=1 AND (value = x or 1=1)
所以如果用户只查询 name ='abc' 和 value any
select * from table where name = 'abc' OR 1=1 and (value = '' OR 1=1):
select * from table where name = '' OR 1=1 and (value = 12 OR 1=1):
因为用户会将其中之一放在 name 或 value 所以我必须将 OR 1=1 放在两者中他们。
<form>
<input type='text' name='name'>
<input type='text' name='value'>
<submit>
</form>
所以现在
1- 如果用户为两者都设置了值,则可以使用简单的 Q= 其中 x=x 和 y=y
2= 如果用户为 one(name) Q= WHERE name=x and value = '' OR 1=1;
3- 如果用户为 one(value)Q=select * from table WHERE name = 'abc' and (value = '' OR 1=1) 输入值:
4-如果用户为both(name,value) Q=select * from table WHERE name='abc' AND value=12;
现在我想要可以管理所有内容的查询:
query = SELECT * FROM table where name = Get-INPUT OR 1=1 AND (value= Get-INPUT or 1=1)
但这对我不起作用,因为条件 (1=1) 为真,它会向我显示所有记录。 问题:如何管理我的表单,如果用户输入一个条件其他条件只是用户 1=1-true
问候
【问题讨论】:
-
您是否只是想获取名称为“abc”的所有行?如果是这样,那么它就是
SELECT * FROM table WHERE name = 'abc' -
如果你不使用方括号,系统会在这种模式下解释 where 子句: (name='abc' and Value=12) 这给出结果 abc 12 然后查询评估 or 子句(1=1) 在您的情况下始终为真,因此它会返回所有其他行。
-
您的问题不清楚。给出的第一个结果有什么问题?为什么要在查询中添加
OR 1=1? -
更新前的第一个答案,因为我必须在 WHERE 中设置条件,并且用户将给出一个值(对于名称或值),因此如果一个条件获得值,另一个条件将为空,因为它与 AND 它一样不会给出结果,所以我设置 1=1 表示 tue,现在我设置了两个,因为用户将输入一个值,所以我设置 1=1 表示两个条件都为真,结果都是我