SELECT 'a'='b'='c' 가 왜 1이 나오나요?
보시면 'a'='b'는 다른값이니까 0이 나오는데
'a'='b'='c'는 1이 나오더라구요, 그러니까 참값이라는거잖아요?
인젝션에 쓰일것 같기도 한 현상이긴 한데..
제 생각에는 = 는 왼쪽으로 가는 연산자니까
'b'='c'를 먼저 계산해서 1이되고
'a'=1
이 되니까 타입 자체가 달라서 0 될거 같은데 이상하더라구요
#injection
#mysql
작성자 정보
답변
1
meu
대표 업적 없음
Type Conversion in Expression Evaluation 링크에서 알 수 있듯 string
과 integer
사이에서의 비교는 number
로 발생합니다.
In all other cases, the arguments are compared as floating-point (real) numbers.
즉, 해당 예가 other cases
에 해당하기에 모든 숫자는 float
으로 전환된 뒤에 발생한다고 생각하면 이해가 쉬우실 겁니다.
돌아가서 string간의 비교 ('b'='c')는 다르기에 0을 반환합니다. 다음 처리할 논리 연산 'a'=0은 먼저 'a'가 Conversion 법칙을 따라 마지막에 등장한 숫자까지만 유효하게 자르는 법칙(예: '123.45e6test' -> 123.45e6 = 123.45 * 10^6 = 123,450,000)이 적용되어 ''
으로 치환되고 이 값이 다시 0
으로 치환되고, 0=0
이 실행되어 마지막 결과값 1을 반환합니다.