[SQL] "여기서 1 = 1"문 [중복]
SQL"여기서 1 = 1"문 [중복]
나는 어떤 사람들은 다음과 같은 MySQL 데이터베이스에서 테이블을 조회 할 수있는 문을 사용했다 :
select * from car_table where 1=1 and value="TOYOTA"
하지만, 여기에 1 = 1의 평균을 무엇?
해결법
-
==============================
1.사람들은 SQL 문을 빌드 할 때 보통입니다.
사람들은 SQL 문을 빌드 할 때 보통입니다.
추가하고 값 때 = "도요타는"당신은 전에하거나 WHERE 조건이 있는지 여부에 대해 걱정할 필요가 없습니다. 옵티마이은 그것을 무시해야
마법없고, 단지 실제
예제 코드 :
commandText = "select * from car_table where 1=1"; if (modelYear <> 0) commandText += " and year="+modelYear if (manufacturer <> "") commandText += " and value="+QuotedStr(manufacturer) if (color <> "") commandText += " and color="+QuotedStr(color) if (california) commandText += " and hasCatalytic=1"
그렇지 않으면 당신은 논리의 복잡한 설정을해야합니다 :
commandText = "select * from car_table" whereClause = ""; if (modelYear <> 0) { if (whereClause <> "") whereClause = whereClause + " and "; commandText += "year="+modelYear; } if (manufacturer <> "") { if (whereClause <> "") whereClause = whereClause + " and "; commandText += "value="+QuotedStr(manufacturer) } if (color <> "") { if (whereClause <> "") whereClause = whereClause + " and "; commandText += "color="+QuotedStr(color) } if (california) { if (whereClause <> "") whereClause = whereClause + " and "; commandText += "hasCatalytic=1" } if (whereClause <> "") commandText = commandText + "WHERE "+whereClause;
-
==============================
2.해당 쿼리가 동적으로 작성되는 경우, 원래 저자는 아마, 조건의 빈 설정을 고려 이런 일에 끝 있도록하고 싶지 않습니다
해당 쿼리가 동적으로 작성되는 경우, 원래 저자는 아마, 조건의 빈 설정을 고려 이런 일에 끝 있도록하고 싶지 않습니다
sql = "select * from car_table where 1=1" for each condition in condition_set sql = sql + " and " + condition.field + " = " + condition.value end
-
==============================
3.값이 = "TOYOTA"비트가 중요한 그래서 1 = 1은 항상 true가됩니다.
값이 = "TOYOTA"비트가 중요한 그래서 1 = 1은 항상 true가됩니다.
당신은 다음과 같은 몇 가지 시나리오에서이 얻을 :
SQL을 생성 : 그것은 복잡한을 생성 쉽게 만들 어디 문 당신은 당신이 할 수있는 첫 번째 조건을 추가하거나하지, 너무 자주 1 = 1 초에 넣어, 다른 모든 조건이 있다면 운동을하지 않은 경우 는 AND가 추가 될
디버깅 : 때때로 당신이 그들을 자유롭게 잘라 및 쿼리를 디버깅 할 때 조건의 나머지 부분을 변경할 수 있습니다 같은 곳 조건의 상단에 1 = 1에 넣어 사람을 참조하십시오. 예를 들면
select * from car_table where 1=1 --and value="TOYOTA" AND color="BLUE" --AND wheels=4
그것은 생산 코드에서 발생하지 않습니다 일반적으로 특히 좋은 방법이 아닙니다하고 있다고 할 수있다. 그것도 아주 많이 쿼리의 최적화에 도움이되지 않을 수도 있습니다.
-
==============================
4.뿐만 아니라 모든 다른 답변, 그것은 SQL 주입 공격에 대한 간단한 기술이다. 당신은 추가 OR 경우 일부 SQL 1 = 1 개 문은 다음 인해 표현의 고유 truthiness 모든 결과를 반환 것합니다.
뿐만 아니라 모든 다른 답변, 그것은 SQL 주입 공격에 대한 간단한 기술이다. 당신은 추가 OR 경우 일부 SQL 1 = 1 개 문은 다음 인해 표현의 고유 truthiness 모든 결과를 반환 것합니다.
-
==============================
5.그 그냥 항상 참 식입니다. 어떤 사람들은 해결 방법으로 사용합니다.
그 그냥 항상 참 식입니다. 어떤 사람들은 해결 방법으로 사용합니다.
그들은 정적 문 등이있다 :
select * from car_table where 1=1
그들은 지금과 where 절에 무언가를 추가 할 수 있도록
and someother filter
-
==============================
6.이 문은 항상 true가됩니다 그래서 항상 1, 1과 동일하기 때문에 조건이 항상 true 인 1 = 1. 때로는 아무런 의미가 없지만. WHERE 조건이 동적으로 생성 될 때하지만 다른 시간의 개발자는이를 사용합니다.
이 문은 항상 true가됩니다 그래서 항상 1, 1과 동일하기 때문에 조건이 항상 true 인 1 = 1. 때로는 아무런 의미가 없지만. WHERE 조건이 동적으로 생성 될 때하지만 다른 시간의 개발자는이를 사용합니다.
예를 들어,이 코드를 볼 수 있습니다
<?php //not that this is just example //do not use it like that in real environment because it security issue. $cond = $_REQUEST['cond']; if ($cond == "age"){ $wherecond = " age > 18"; } $query = "select * from some_table where $wherecond"; ?>
그래서 위의 예에서 $ _REQUEST [ '콘드는'] "나이는"WHERE 조건 이후에 아무것도 없기 때문에 쿼리는 MySQL의 오류를 반환하지 않은 경우.
그 오류가 어디에 쿼리는 some_table SELECT * FROM 될 것입니다
우리가 사용하는 (이 안전하지 않은 예 적어도)이 문제를 해결하려면
<?php //not that this is just example //do not use it like that in real environment because it security issue. $cond = $_REQUEST['cond']; if ($cond == "age"){ $wherecond = " age > 18"; } else { $wherecond = " 1=1"; } $query = "select * from some_table where $wherecond"; ?>
쿼리는 MySQL의 오류 리턴을하지 않도록 그래서 지금은 $ _REQUEST [ '콘드는']를 $를 나이가되지 않은 경우 wherecond 1 = 1이 될 것이다.
쿼리는 어디에 1 = 1 피하기 MySQL의 오류 some_table에서 선택 * 것
우리는 위의 예는 실제 예제는 아니라고 주 동안 1 = 1을 사용하고 그냥 당신에게 아이디어를 보여줄 때 당신이 이해 바랍니다.
-
==============================
7.시간 개발자 사용 쿼리의 이러한 유형의 대부분은 그가 쿼리 빌더 형 응용 프로그램을 개발하거나 선택 문 문자열과 함께 그래서 일부 복잡한 SQL 쿼리를 구축하는 경우 조건절 1 = 1을 추가하고, 프로그램의 필요에 대한 검사를 추가하지 않으려면 그것.
시간 개발자 사용 쿼리의 이러한 유형의 대부분은 그가 쿼리 빌더 형 응용 프로그램을 개발하거나 선택 문 문자열과 함께 그래서 일부 복잡한 SQL 쿼리를 구축하는 경우 조건절 1 = 1을 추가하고, 프로그램의 필요에 대한 검사를 추가하지 않으려면 그것.
-
==============================
8.쿼리 1은 1 개 값 같음 'TOYOTA을'에 해당하는 모든 행을 찾습니다. 따라서이 경우에는 쓸모없는,하지만 당신은 WHERE 문을 생략하면, 그것은 1 = 1 당신이 WHERE 절을 사용하지 않기로 있음을 알려하는 데 사용하는 좋은 아이디어가 될 수 있습니다.
쿼리 1은 1 개 값 같음 'TOYOTA을'에 해당하는 모든 행을 찾습니다. 따라서이 경우에는 쓸모없는,하지만 당신은 WHERE 문을 생략하면, 그것은 1 = 1 당신이 WHERE 절을 사용하지 않기로 있음을 알려하는 데 사용하는 좋은 아이디어가 될 수 있습니다.
-
==============================
9.이것의 사용은 통과 조건이 동적으로, 당신은 "AND"문자열을 사용하여 조건을 연결할 수 있습니다 복잡한 쿼리에 온다. 그럼, 대신 당신이 전달하는 조건의 수를 계산, 당신은 장소에 "WHERE 1 = 1"연결된 상태에서 당신의 주식 SQL 문의 끝에와 던져.
이것의 사용은 통과 조건이 동적으로, 당신은 "AND"문자열을 사용하여 조건을 연결할 수 있습니다 복잡한 쿼리에 온다. 그럼, 대신 당신이 전달하는 조건의 수를 계산, 당신은 장소에 "WHERE 1 = 1"연결된 상태에서 당신의 주식 SQL 문의 끝에와 던져.
필요하면 = 0 2 = 2,3 = 3,5 = 5 (25) = 25 0을 사용할 수 있습니다 1 = 1을 사용합니다 ......
select * from car_table where 0=0 and value="TOYOTA"
여기 또한 1 = 1 조건과 같은 동일한 결과를 얻을 것이다
모든 있기 때문에 이러한 경우는 항상 true 표현이다
1=1 is alias for true
-
==============================
10.내가 동적 필터를 적용해야 할 때 내가 이런 짓을. 추천 제가 적용 얼마나 많은 필터를 사용하면서 부호화 몰라 (FLD1 = VAL1과 FLD2을 val2 =하고 ...) 그래서, 문 "과 FLD = 발"나는 "1 = 1"로 시작을 반복합니다. 따라서, 나는 문에서 첫 번째 "와"트림 필요가 없다.
내가 동적 필터를 적용해야 할 때 내가 이런 짓을. 추천 제가 적용 얼마나 많은 필터를 사용하면서 부호화 몰라 (FLD1 = VAL1과 FLD2을 val2 =하고 ...) 그래서, 문 "과 FLD = 발"나는 "1 = 1"로 시작을 반복합니다. 따라서, 나는 문에서 첫 번째 "와"트림 필요가 없다.
from https://stackoverflow.com/questions/8149142/where-1-1-statement by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 오라클의 모든 테이블 제약을 해제 (0) | 2020.04.28 |
---|---|
[SQL] PostgreSQL의에서 타임 스탬프에서 추출 날짜 (년 / 월 / 일) (0) | 2020.04.28 |
[SQL] 어떻게 SQL 쿼리에서 변수를 설정하는 방법? (0) | 2020.04.28 |
[SQL] SQL 데이터베이스에 위도와 경도 데이터를 저장할 때 어떤 데이터 유형을 사용 하는가? [복제] (0) | 2020.04.28 |
[SQL] 테이블의 열 순서 걱정할 어떤 이유가 있나요? (0) | 2020.04.28 |