복붙노트

[SQL] "여기서 1 = 1"문 [중복]

SQL

"여기서 1 = 1"문 [중복]

나는 어떤 사람들은 다음과 같은 MySQL 데이터베이스에서 테이블을 조회 할 수있는 문을 사용했다 :

select * from car_table where 1=1 and value="TOYOTA"

하지만, 여기에 1 = 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. ==============================

    2.해당 쿼리가 동적으로 작성되는 경우, 원래 저자는 아마, 조건의 빈 설정을 고려 이런 일에 끝 있도록하고 싶지 않습니다

    해당 쿼리가 동적으로 작성되는 경우, 원래 저자는 아마, 조건의 빈 설정을 고려 이런 일에 끝 있도록하고 싶지 않습니다

    sql = "select * from car_table where 1=1"
    for each condition in condition_set
    
        sql = sql + " and " + condition.field + " = " + condition.value
    
    end
    
  3. ==============================

    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. ==============================

    4.뿐만 아니라 모든 다른 답변, 그것은 SQL 주입 공격에 대한 간단한 기술이다. 당신은 추가 OR 경우 일부 SQL 1 = 1 개 문은 다음 인해 표현의 고유 truthiness 모든 결과를 반환 것합니다.

    뿐만 아니라 모든 다른 답변, 그것은 SQL 주입 공격에 대한 간단한 기술이다. 당신은 추가 OR 경우 일부 SQL 1 = 1 개 문은 다음 인해 표현의 고유 truthiness 모든 결과를 반환 것합니다.

  5. ==============================

    5.그 그냥 항상 참 식입니다. 어떤 사람들은 해결 방법으로 사용합니다.

    그 그냥 항상 참 식입니다. 어떤 사람들은 해결 방법으로 사용합니다.

    그들은 정적 문 등이있다 :

    select * from car_table where 1=1
    

    그들은 지금과 where 절에 무언가를 추가 할 수 있도록

    and someother filter
    
  6. ==============================

    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. ==============================

    7.시간 개발자 사용 쿼리의 이러한 유형의 대부분은 그가 쿼리 빌더 형 응용 프로그램을 개발하거나 선택 문 문자열과 함께 그래서 일부 복잡한 SQL 쿼리를 구축하는 경우 조건절 1 = 1을 추가하고, 프로그램의 필요에 대한 검사를 추가하지 않으려면 그것.

    시간 개발자 사용 쿼리의 이러한 유형의 대부분은 그가 쿼리 빌더 형 응용 프로그램을 개발하거나 선택 문 문자열과 함께 그래서 일부 복잡한 SQL 쿼리를 구축하는 경우 조건절 1 = 1을 추가하고, 프로그램의 필요에 대한 검사를 추가하지 않으려면 그것.

  8. ==============================

    8.쿼리 1은 1 개 값 같음 'TOYOTA을'에 해당하는 모든 행을 찾습니다. 따라서이 경우에는 쓸모없는,하지만 당신은 WHERE 문을 생략하면, 그것은 1 = 1 당신이 WHERE 절을 사용하지 않기로 있음을 알려하는 데 사용하는 좋은 아이디어가 될 수 있습니다.

    쿼리 1은 1 개 값 같음 'TOYOTA을'에 해당하는 모든 행을 찾습니다. 따라서이 경우에는 쓸모없는,하지만 당신은 WHERE 문을 생략하면, 그것은 1 = 1 당신이 WHERE 절을 사용하지 않기로 있음을 알려하는 데 사용하는 좋은 아이디어가 될 수 있습니다.

  9. ==============================

    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. ==============================

    10.내가 동적 필터를 적용해야 할 때 내가 이런 짓을. 추천 제가 적용 얼마나 많은 필터를 사용하면서 부호화 몰라 (FLD1 = VAL1과 FLD2을 val2 =하고 ...) 그래서, 문 "과 FLD = 발"나는 "1 = 1"로 시작을 반복합니다. 따라서, 나는 문에서 첫 번째 "와"트림 필요가 없다.

    내가 동적 필터를 적용해야 할 때 내가 이런 짓을. 추천 제가 적용 얼마나 많은 필터를 사용하면서 부호화 몰라 (FLD1 = VAL1과 FLD2을 val2 =하고 ...) 그래서, 문 "과 FLD = 발"나는 "1 = 1"로 시작을 반복합니다. 따라서, 나는 문에서 첫 번째 "와"트림 필요가 없다.

  11. from https://stackoverflow.com/questions/8149142/where-1-1-statement by cc-by-sa and MIT license