선택 쿼리에서 백틱을 사용할 때 SQL 쿼리가 테이블 데이터를 반환하는 이유는 무엇입니까?

Ayberk Eser

SQL 쿼리에 사용되는 Javascript 객체를 사용하는 CTF 문제를 해결했지만 왜 작동하는지 이해할 수 없습니다. 내가 사용한 명령은 다음과 같습니다.

mysql> select * from myTable;
+----+------------+-------------+
| id | first      | second      |
+----+------------+-------------+
|  1 | first_data | second_data |
|  2 | third_data | fourth_data |
+----+------------+-------------+
2 rows in set (0.00 sec)

mysql> select * from myTable where first = `second` = 'anyString';
+----+------------+-------------+
| id | first      | second      |
+----+------------+-------------+
|  1 | first_data | second_data |
|  2 | third_data | fourth_data |
+----+------------+-------------+
2 rows in set, 1 warning (0.01 sec)

mysql> select * from myTable where first = `first` = 'anyString';
Empty set, 1 warning (0.00 sec)

mysql> 
고든 리노 프

이 표현식은 예상 한대로 작동하지 않습니다.

first = `second` = 'anyString'

이것은 다음과 같이 구문 분석됩니다.

first = (`second` = 'anyString')

(기술적으로는 다음 (first = second) = 'anyString'같을 수 있지만 설명이 변경되지는 않습니다.)

일반적으로 다음과 같습니다.

first = false

MySQL은 부울을 숫자로 취급하므로 다음과 같습니다.

first = 0

그리고 first암시 적으로 숫자로 변환됩니다. 암시 적 변환은 선행 숫자를 변환합니다. 그리고 아무것도 없으면 0. 따라서 이것은 다음과 같습니다.

0 = 0

짜잔! 모든 데이터가 반환됩니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관